|
Noeud:Exercises on Flex, Noeud «Previous»:Using Flex with the GNU Build System, Noeud «Up»:Scanning with Flex
0rradix:number
. Implement this mode in
ylscan.l
.
csize
, a simple program
performing statistics on C sources. For instance running it on the
Yleval module gives:
$ csize -h yleval.h yleval.c ylscan.c ylparse.h ylparse.c total blank lines w/ nb, nc semi- preproc. file lines lines comments lines colons direct. ------+--------+--------+--------+--------+--------+---- 69 10 27 33 8 9 yleval.h 237 35 37 165 60 13 yleval.c 1730 296 279 1185 391 303 ylscan.c 54 7 1 47 7 36 ylparse.h 1290 178 237 915 288 279 ylparse.c 3380 526 581 2345 754 640 total
switch
. Implement one such program, beswitch
, thanks
to Flex. beswitch
must be a drop-in replacement of Gperf.
Your scanner must be better than that of Gperf, in particular, it shall
not be confused by /* %} */
or " %} "
in the prologue.
You are likely to need several start conditions, such as C_CODE
,
PROLOGUE
, COMMENT
, STRING
, etc. The simple
BEGIN
will no longer be sufficient, and you will probably need
some form of sub-scanner recursive calls: see %option stack
,
yy_stack_push
, and yy_stack_pop
in (FIXME: Flex ref.).