COMPILERENGINEERING  LAB # 6: FLEX
REVISION: FLEX • A flex program consists of three sections, separated   by %% lines, which are:     1. Definition Section:...
REVISION: FLEX • A flex program consists of three sections, separated   by %% lines, which are:     3. Sub-routines Sectio...
REVISION: FLEX • yytext  is set to point to the input text that the   pattern just matched. • Each Token Flex returns has...
REGULAR EXPRESSIONS  Regular                                  Meaning Expression  Symbol        +           Match one or m...
REVISION: FLEX • Ex: for the input (3+44+100) which regular expression will be    used?        digit       [0-9]        %%...
USING FLEX TOOL 1. $ flex WordCount.l     • First we tell flex to translate our program, and in classic Unix       fashion...
FLEX FILE EXAMPLE # 1:                    CALCULATOR • Write a Calculator .l scanner, returning token for   following lexe...
* recognize tokens for the calculator and print them out */                                                         Cal.l%...
FLEX FILE EXAMPLE # 2:                CALCULATOR • Adjust the Calculator.l scanner written in the   previous example (#1),...
/* recognize tokens for the calculator and print them out */                  Cal2.l%{enum yytokentype {NUMBER = 258, ADD ...
FLEX FILE EXAMPLE # 3:                 WORD COUNTER • Write a Flex file that is capable to produce a   scanner that counts...
WordCount.l/* just like Unix wc */%{int chars = 0;int words = 0;int lines = 0;%}%%[a-zA-Z]+        { words++; chars += str...
QUESTIONS? Thank you for listening                    Department of Computer Science -7-11/4/12                          ...
Upcoming SlideShare
Loading in …5
×

6 compiler lab - Flex

1,649 views

Published on

Working with Flex under Cygwin

Published in: Education, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,649
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
151
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

6 compiler lab - Flex

  1. 1. COMPILERENGINEERING LAB # 6: FLEX
  2. 2. REVISION: FLEX • A flex program consists of three sections, separated by %% lines, which are: 1. Definition Section: contains declarations and option settings • Any code inside of %{ and %} is copied through verbatim near the beginning of the generated C source file 2. Rules Section: is a list of patterns and actions. • Each pattern must start at the beginning of the line, since flex considers any line that starts with whitespace to be code to be copied into the generated C program. Department of Computer Science -7-11/4/12 2 Compiler Engineering Lab
  3. 3. REVISION: FLEX • A flex program consists of three sections, separated by %% lines, which are: 3. Sub-routines Section: is C code that is copied to the generated scanner, usually small routines related to the code in the actions. • The C code at the end is a main program that calls yylex(), the name that flex gives to the scanner routine, and then prints the results • Note: • In the absence of any other arrangements, the scanner reads from the standard input Department of Computer Science -7-11/4/12 3 Compiler Engineering Lab
  4. 4. REVISION: FLEX • yytext  is set to point to the input text that the pattern just matched. • Each Token Flex returns has two parts: 1. The Token (The Token Zero always means End-of-File) 2. The Token Value Department of Computer Science -7-11/4/12 4 Compiler Engineering Lab
  5. 5. REGULAR EXPRESSIONS Regular Meaning Expression Symbol + Match one or more of the preceding patterns * Match Zero or more of the preceding patterns | Or . Any character except new line n New line [] Character Class - Range ^ Not (Negative), ^ at the beginning of the character class means to match any character other than the ones in the class Department of Computer Science -7-11/4/12 5 Compiler Engineering Lab
  6. 6. REVISION: FLEX • Ex: for the input (3+44+100) which regular expression will be used? digit [0-9] %% “+” {printf (“Plusn”);} [a-zA-Z] {printf (“IDn”);} digit+ {printf (“Plusn”);} ([0-9]digit) {printf (“Plusn”);} %% • What happens If Flex matches two patterns: • It will take the longer match (number of characters) • If both were equal in length, it will take the first match to appear. Department of Computer Science -7-11/4/12 6 Compiler Engineering Lab
  7. 7. USING FLEX TOOL 1. $ flex WordCount.l • First we tell flex to translate our program, and in classic Unix fashion since there are no errors, it does so and says nothing. 2. $ cc lex.yy.c –lfl • Then we compile lex.yy.c, the C program it generated; link it with the flex library, -lfl 3. $ ./a.out This is an example for compiler lab • run it; and type a little input for it to count (to stop input to file press Ctrl + D [or type End-of-File character: ^D on Unix, ot ^Z on Windows]). Department of Computer Science -7-11/4/12 7 Compiler Engineering Lab
  8. 8. FLEX FILE EXAMPLE # 1: CALCULATOR • Write a Calculator .l scanner, returning token for following lexemes: • Plus + • Minus – • Multiplication * • division / • Absolute| • Number types and values • End of line • White space • Any other character print an error message Department of Computer Science -7-11/4/12 8 Compiler Engineering Lab
  9. 9. * recognize tokens for the calculator and print them out */ Cal.l%%“+” { printf("PLUSn"); }“-” { printf("MINUSn"); }“*” { printf("TIMESn"); }“/” { printf("DIVIDEn"); }“|” { printf("ABSn"); }[0-9]+ { printf("NUMBER %sn", yytext); } n { printf("NEWLINEn"); }[ t] { } { printf("Mystery character %sn", yytext); }%% Department of Computer Science -7-11/4/12 9 Compiler Engineering Lab
  10. 10. FLEX FILE EXAMPLE # 2: CALCULATOR • Adjust the Calculator.l scanner written in the previous example (#1), where the scanner will return the value of the tokens instead of printing them: • NUMBER = 258, ADD = 259, SUB = 260, MUL = 261, DIV = 262, ABS = 263, EOL = 264 end of line Department of Computer Science -7-11/4/12 10 Compiler Engineering Lab
  11. 11. /* recognize tokens for the calculator and print them out */ Cal2.l%{enum yytokentype {NUMBER = 258, ADD = 259, SUB = 260, MUL = 261, DIV = 262, ABS = 263, EOL = 264};int yylval;%}%%”+” { return ADD; }”-” { return SUB; }”*” { return MUL; }”/” { return DIV; }”|” { return ABS; }[0-9]+ { yylval = atoi(yytext); return NUMBER; }n { return EOL; }[ t] { /* ignore whitespace */ }. { printf("Mystery character %cn", *yytext); }%%main(int argc, char **argv){ int tok; while(tok = yylex()) { printf("%d", tok); if(tok == NUMBER) printf(" = %dn", yylval); else printf("n");}} Department of Computer Science -7-11/4/12 11 Compiler Engineering Lab
  12. 12. FLEX FILE EXAMPLE # 3: WORD COUNTER • Write a Flex file that is capable to produce a scanner that counts: • Characters, • New lines, • And words Department of Computer Science -7-11/4/12 12 Compiler Engineering Lab
  13. 13. WordCount.l/* just like Unix wc */%{int chars = 0;int words = 0;int lines = 0;%}%%[a-zA-Z]+ { words++; chars += strlen(yytext); } n { chars++; lines++; }. { chars++; }%%main(int argc, char **argv){yylex();printf("%8d%8d%8dn", lines, words, chars);} Department of Computer Science -7-11/4/12 13 Compiler Engineering Lab
  14. 14. QUESTIONS? Thank you for listening  Department of Computer Science -7-11/4/12 14 Compiler Engineering Lab

×