Jim|James { ECHO; } Jim|James { printf("%s",yytext); }The following lex specification draws together several of the points discussed previously.
1 %{ 2 int subprogcount = 0; 3 int gstringcount = 0; 4 %} 5 %% 6 -[0-9]+ printf("negative integer\n"); 7 "+"?[0-9]+ printf("positive integer\n"); 8 -0\.[0-9]+ printf("negative real number, no whole number part\n"); 9 rail[ ]+road printf("railroad is one word\n"); 10 crook printf("Here's a crook!\n"); 11 function subprogcount++; 12 G[a-zA-Z]* { 13 printf("may have a G word here: %s\n ", yytext); 14 gstringcount++; 15 }Explanation:
The first three rules (lines 6-8) recognize negative integers, positive integers, and negative real numbers between 0 and -1.
The fourth rule (line 9) matches cases where one or more blanks intervene between the two syllables of the word ``railroad''.
The fifth specification (line 10) matches the word ``crook'' and prints a useful warning. The rule recognizing ``function'' (line 11) increments a counter.
The last rule (lines 12-15) illustrates a multiline action, and the use of yytext.
No comments:
Post a Comment