Misuse of lex
770457@Mohamed Ellozy
mohamedr at hscfvax.UUCP
Mon Mar 9 08:45:08 AEST 1987
It is common to use lex to recognize a long list of reserved words
with constructs like:
options return (OPTIONS);
precedence return (PRECEDENCE);
trusted return (TRUSTED);
many, many more
[A-Za-z][A-Za-z0-9_-]* {
/* store identifiers in symbol table */
yylval.phe = LookupSymbol (yytext);
return (IDENT);
}
This produces huge lexical analysers. Furthermore, they compile
with agonizing slowness, so they can hardly be considered a
convenience to the developper. It is easy to recode them to look
up reserved words by binary search in a table. See Introduction to
Compiler Construction with UNIX by A. T. Schreiner and H. G. Friedman Jr.
Prentice Hall, 1985, ISBN 0-13-474396-2 01 if you need help.
The improvement in compilation speed is remarkable, as the following
timings will show:
hscfvax# time lex lexan.old.l
249.7u 14.1s 5:55 74% 49+239k 2+12io 14pf+0w
hscfvax# mv lex.yy.c lexan.old.c
hscfvax# time cc -c lexan.old.c
67.2u 5.5s 1:28 82% 131+243k 70+94io 29pf+0w
hscfvax# time lex lexan.l
2.5u 0.7s 0:05 62% 44+199k 1+6io 14pf+0w
hscfvax# mv lex.yy.c lexan.c
hscfvax# time cc -c lexan.c
20.1u 2.6s 0:28 79% 124+224k 16+46io 29pf+0w
hscfvax# ls -l lex*
-rw-r--r-- 1 root 14240 Mar 8 12:08 lexan.c
-rw-r--r-- 1 root 4761 Mar 8 12:07 lexan.l
-rw-r--r-- 1 root 10873 Mar 8 12:09 lexan.o
-rw-r--r-- 1 root 42495 Mar 8 12:02 lexan.old.c
-rw-r--r-- 1 root 5031 Mar 8 10:55 lexan.old.l
-rw-r--r-- 1 root 37343 Mar 8 12:04 lexan.old.o
Seven and a half minutes of clock time versus half a minute. As my wife
(a law student) would say: Res ipsa loquitur.
(Must I translate? Oh well, it means: The thing speaks for itself.)
More information about the Comp.unix.wizards
mailing list