Your SlideShare is downloading. ×
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
6 compiler lab - Flex
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

6 compiler lab - Flex

1,163

Published on

Working with Flex under Cygwin

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,163
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
122
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. COMPILERENGINEERING LAB # 6: FLEX
  • 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. 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. 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. 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. 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. 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. 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. * 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. 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. /* 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. 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. 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. QUESTIONS? Thank you for listening  Department of Computer Science -7-11/4/12 14 Compiler Engineering Lab

×