Sample lex Specification[Runnable version of Fig. 3.23 from Aho, Lam, Sethi, and Ullman, Compilers.]
%{ /* lexasu.l Fig. 3.23 from Aho, Lam, Sethi, and Ullman, Compilers */ #define LT 8 /* Example of use: */ #define LE 9 /* lex /projects/cs375/lexasu.l compile lexasu.l to C */ #define EQ 6 /* cc lex.yy.c -ll Compile lex output with C */ #define NE 7 /* a.out Execute C output */ #define GT 11 /* if switch then 3.14 else 4 Test data */ #define GE 10 /* #define ID 3 #define NUMBER 5 #define OP 1 /* to avoid returning 0 */ #define IF 13 #define THEN 23 #define ELSE 7 int yylval; /* type of the returned value */ %} /* regular definitions */ delim [ \t\n] ws {delim}+ letter [A-Za-z] digit [0-9] id {letter}({letter}|{digit})* number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)? %% {ws} { /* no action and no return */ } if { return(IF); } then { return(THEN); } else { return(ELSE); } {id} { yylval = install_id(); return(ID); } {number} { yylval = install_num(); return(NUMBER); } "<" { yylval = LT; return(OP); } "<=" { yylval = LE; return(OP); } "=" { yylval = EQ; return(OP); } "<>" { yylval = NE; return(OP); } ">" { yylval = GT; return(OP); } ">=" { yylval = GE; return(OP); }