10-25-2006
Multiple scanners on same input file using lex/flex
Hi all,
I'm working with flex (version 2.5.4a) on GNU/linux. I used it to develop 4 scanner C files for matching different patterns within an input file. But the problem now on my hand is that I need to conditionally combine these. That is in main (placed in a separate C file other than the 4 scanner files) I'll have check the options provided by the user and accordingly call the scanner functions from the scanner C files.
For ex. if main is in file app.c and options are:
-f - for scanner function of 1st scanner file
-s - for scanner function of 2nd scanner file
-t - for scanner function of 3rd scanner file
-r - for scanner function of 4th scanner file
so something like './app -f -s -r filename' would mean that the scanners from 1st, 2nd and 4th file are called while 3rd's is not called.
The problem with such a situation is that when lex is invoked it generates C file with scanner function yylex() (and supporting functions for it). Now this function has same signature in all 4 scanners and hence the inclusion of all 4 files causes name conflict ("error: yylex() redifned here". Even -P option does not help as it just #define s the original function).
Now I hope everybody must be understanding my difficulty. Is there any way out (without changing to C++)?
While I'll like a functional decomposition as stated above but even if someone can come up with a solution where I need to combine all lex files to one and still be able to control what pattern are to be matched according to the switch provided by user in 'main()' will be a great help.
Thanks in advance!
10 More Discussions You Might Find Interesting
1. Shell Programming and Scripting
Hello ,
I am trying to print the footer of evry file in the given directory with xargs command like follows
ls -1 | xargs -I {} gzcat {} | tail -1
now problem with this is only last file foooter is getting printed as " | tail -1 " is getting executed for the last file.
I know this can... (4 Replies)
Discussion started by: nilesrex
4 Replies
2. Shell Programming and Scripting
I've got:
isql -U $USERID -S $SERVER -D $DATABASE -i inputfile.sql -o outputfile.txt
in inputfile I have:
go
sql#1
go
sql#2
go
sql#3
go
I also tried without "go" and with";" instead which did not work
SQL statements will work if I paste them directly into the script and use EOF
... (0 Replies)
Discussion started by: Cailet
0 Replies
3. Shell Programming and Scripting
Hi there,
I am trying to figure out a way to combine multiple sources with different data on a single file, and I am trying to find the best way to do it.
I have multiple files, let's say A, B, C and D. A has a field in common with B, B has a field in common with C, and C has a field in... (2 Replies)
Discussion started by: ppucci
2 Replies
4. Shell Programming and Scripting
I have a file with lines something like.
......
123_start
......
.......
123_end
....
.....
456_start
......
.....
456_end
....
.....
789_start
....
....
789_end (6 Replies)
Discussion started by: abinash
6 Replies
5. Shell Programming and Scripting
Hi,
I'm working on a script which has to copy multiple files from one server to another server. The list of files that are to be copied is present in a file say input.txt.
vi input.txt
abc.c
welcome.c
new.c
welcome1.c
for ftp'ing a single file say 'new.c' the following code... (2 Replies)
Discussion started by: i.srini89
2 Replies
6. Homework & Coursework Questions
Florida State University, Tallahassee, FL USA, Dr. Whalley, COP4342
1. The problem statement, all variables and given/known data:
Create a lex specification file that reads a C source program that ignores keywords and collects all identifiers (regular variable names) and also displays the line... (3 Replies)
Discussion started by: D2K
3 Replies
7. Shell Programming and Scripting
Once a time, I did see a way to multiply a file input in bash, but have forgotten how it was done.
Eks.
awk 'FNR==NR {a++;next} ($2 in a) {print $2}' file file
Here you need file two times.
I seen it some like this
awk 'FNR==NR {a++;next} ($2 in a) {print $2}' 2&file (16 Replies)
Discussion started by: Jotne
16 Replies
8. Shell Programming and Scripting
Hello,
I have a file called COMPLIST as follows that contains 4 digit numbers.0002
0003
0010
0013
0015
0016
0022
0023
0024
0025
0027
0030
0031
0032
0033
0035
0038
0041 (3 Replies)
Discussion started by: sph90457
3 Replies
9. Shell Programming and Scripting
Hello,
I have been working on script in which search and replace the multiple pattern.
1. update_params.sh read the multiple pattern from input file ParamMapping.txt(old_entry|New_entry) and passing this values one by one to change_text.sh
2. change_text.sh read... (0 Replies)
Discussion started by: ketanraut
0 Replies
10. Shell Programming and Scripting
GM,
I have an issue at work, which requires a simple solution. But, after multiple attempts, I have not been able to hit on the code needed.
I am assuming that sed, awk or even perl could do what I need.
I have an application that adds extra blank page feeds, for multiple reports, when... (7 Replies)
Discussion started by: jxfish2
7 Replies
FLEX(1) User Commands FLEX(1)
NAME
flex - the fast lexical analyser generator
SYNOPSIS
flex [OPTIONS] [FILE]...
DESCRIPTION
Generates programs that perform pattern-matching on text.
Table Compression:
-Ca, --align
trade off larger tables for better memory alignment
-Ce, --ecs
construct equivalence classes
-Cf do not compress tables; use -f representation
-CF do not compress tables; use -F representation
-Cm, --meta-ecs
construct meta-equivalence classes
-Cr, --read
use read() instead of stdio for scanner input
-f, --full
generate fast, large scanner. Same as -Cfr
-F, --fast
use alternate table representation. Same as -CFr
-Cem default compression (same as --ecs --meta-ecs)
Debugging:
-d, --debug
enable debug mode in scanner
-b, --backup
write backing-up information to lex.backup
-p, --perf-report
write performance report to stderr
-s, --nodefault
suppress default rule to ECHO unmatched text
-T, --trace
flex should run in trace mode
-w, --nowarn
do not generate warnings
-v, --verbose
write summary of scanner statistics to stdout
Files:
-o, --outfile=FILE
specify output filename
-S, --skel=FILE
specify skeleton file
-t, --stdout
write scanner on stdout instead of lex.yy.c
--yyclass=NAME
name of C++ class
--header-file=FILE
create a C header file in addition to the scanner
--tables-file[=FILE] write tables to FILE
Scanner behavior:
-7, --7bit
generate 7-bit scanner
-8, --8bit
generate 8-bit scanner
-B, --batch
generate batch scanner (opposite of -I)
-i, --case-insensitive
ignore case in patterns
-l, --lex-compat
maximal compatibility with original lex
-X, --posix-compat
maximal compatibility with POSIX lex
-I, --interactive
generate interactive scanner (opposite of -B)
--yylineno
track line count in yylineno
Generated code:
-+, --c++
generate C++ scanner class
-Dmacro[=defn]
#define macro defn (default defn is '1')
-L, --noline
suppress #line directives in scanner
-P, --prefix=STRING
use STRING as prefix instead of "yy"
-R, --reentrant
generate a reentrant C scanner
--bison-bridge
scanner for bison pure parser.
--bison-locations
include yylloc support.
--stdinit
initialize yyin/yyout to stdin/stdout
--noansi-definitions old-style function definitions
--noansi-prototypes
empty parameter list in prototypes
--nounistd
do not include <unistd.h>
--noFUNCTION
do not generate a particular FUNCTION
Miscellaneous:
-c do-nothing POSIX option
-n do-nothing POSIX option
-?
-h, --help
produce this help message
-V, --version
report flex version
SEE ALSO
The full documentation for flex is maintained as a Texinfo manual. If the info and flex programs are properly installed at your site, the
command
info flex
should give you access to the complete manual.
flex 2.5.36 July 2012 FLEX(1)