SlideShare a Scribd company logo
1 of 14
COMPILER
ENGINEERING
  LAB # 6: FLEX
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
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
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
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
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
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
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
* 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
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
/* 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
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
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
QUESTIONS?

 Thank you for listening 




                   Department of Computer Science -
7-11/4/12                                             14
                      Compiler Engineering Lab

More Related Content

What's hot

Compiler Design
Compiler DesignCompiler Design
Compiler DesignMir Majid
 
Compiler design syntax analysis
Compiler design syntax analysisCompiler design syntax analysis
Compiler design syntax analysisRicha Sharma
 
Ch 3 Assembler in System programming
Ch 3 Assembler in System programming Ch 3 Assembler in System programming
Ch 3 Assembler in System programming Bhatt Balkrishna
 
Compiler Design Introduction
Compiler Design IntroductionCompiler Design Introduction
Compiler Design IntroductionKuppusamy P
 
Debuggers in system software
Debuggers in system softwareDebuggers in system software
Debuggers in system softwaregayathri ravi
 
Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design MAHASREEM
 
Lecture 01 introduction to compiler
Lecture 01 introduction to compilerLecture 01 introduction to compiler
Lecture 01 introduction to compilerIffat Anjum
 
compiler ppt on symbol table
 compiler ppt on symbol table compiler ppt on symbol table
compiler ppt on symbol tablenadarmispapaulraj
 
Compiler Construction Course - Introduction
Compiler Construction Course - IntroductionCompiler Construction Course - Introduction
Compiler Construction Course - IntroductionMuhammad Sanaullah
 
Parsing in Compiler Design
Parsing in Compiler DesignParsing in Compiler Design
Parsing in Compiler DesignAkhil Kaushik
 
Theory of computing
Theory of computingTheory of computing
Theory of computingRanjan Kumar
 
Lecture 3 RE NFA DFA
Lecture 3   RE NFA DFA Lecture 3   RE NFA DFA
Lecture 3 RE NFA DFA Rebaz Najeeb
 

What's hot (20)

Compiler Design
Compiler DesignCompiler Design
Compiler Design
 
Assemblers
AssemblersAssemblers
Assemblers
 
COMPILER DESIGN
COMPILER DESIGNCOMPILER DESIGN
COMPILER DESIGN
 
Compiler design syntax analysis
Compiler design syntax analysisCompiler design syntax analysis
Compiler design syntax analysis
 
Compiler Design
Compiler DesignCompiler Design
Compiler Design
 
Ch 3 Assembler in System programming
Ch 3 Assembler in System programming Ch 3 Assembler in System programming
Ch 3 Assembler in System programming
 
Compiler Design Introduction
Compiler Design IntroductionCompiler Design Introduction
Compiler Design Introduction
 
Debuggers in system software
Debuggers in system softwareDebuggers in system software
Debuggers in system software
 
Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design Syntax Analysis in Compiler Design
Syntax Analysis in Compiler Design
 
Compiler unit 1
Compiler unit 1Compiler unit 1
Compiler unit 1
 
Lecture 01 introduction to compiler
Lecture 01 introduction to compilerLecture 01 introduction to compiler
Lecture 01 introduction to compiler
 
Code Optimization
Code OptimizationCode Optimization
Code Optimization
 
compiler ppt on symbol table
 compiler ppt on symbol table compiler ppt on symbol table
compiler ppt on symbol table
 
LEX & YACC
LEX & YACCLEX & YACC
LEX & YACC
 
Single Pass Assembler
Single Pass AssemblerSingle Pass Assembler
Single Pass Assembler
 
P code
P codeP code
P code
 
Compiler Construction Course - Introduction
Compiler Construction Course - IntroductionCompiler Construction Course - Introduction
Compiler Construction Course - Introduction
 
Parsing in Compiler Design
Parsing in Compiler DesignParsing in Compiler Design
Parsing in Compiler Design
 
Theory of computing
Theory of computingTheory of computing
Theory of computing
 
Lecture 3 RE NFA DFA
Lecture 3   RE NFA DFA Lecture 3   RE NFA DFA
Lecture 3 RE NFA DFA
 

Similar to 6 compiler lab - Flex

Compiler Engineering Lab#5 : Symbol Table, Flex Tool
Compiler Engineering Lab#5 : Symbol Table, Flex ToolCompiler Engineering Lab#5 : Symbol Table, Flex Tool
Compiler Engineering Lab#5 : Symbol Table, Flex ToolMashaelQ
 
Compiler Engineering Lab#3
Compiler Engineering Lab#3Compiler Engineering Lab#3
Compiler Engineering Lab#3MashaelQ
 
Programming with c language practical manual
Programming with c language practical manualProgramming with c language practical manual
Programming with c language practical manualAnil Bishnoi
 
7 compiler lab
7 compiler lab 7 compiler lab
7 compiler lab MashaelQ
 
Lex (lexical analyzer)
Lex (lexical analyzer)Lex (lexical analyzer)
Lex (lexical analyzer)Sami Said
 
Lex tool manual
Lex tool manualLex tool manual
Lex tool manualSami Said
 
cmp104 lec 8
cmp104 lec 8cmp104 lec 8
cmp104 lec 8kapil078
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_netNico Ludwig
 
Complete C programming Language Course
Complete C programming Language CourseComplete C programming Language Course
Complete C programming Language CourseVivek chan
 
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxCS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxfaithxdunce63732
 
(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_languageNico Ludwig
 

Similar to 6 compiler lab - Flex (20)

Compiler Engineering Lab#5 : Symbol Table, Flex Tool
Compiler Engineering Lab#5 : Symbol Table, Flex ToolCompiler Engineering Lab#5 : Symbol Table, Flex Tool
Compiler Engineering Lab#5 : Symbol Table, Flex Tool
 
Compiler Engineering Lab#3
Compiler Engineering Lab#3Compiler Engineering Lab#3
Compiler Engineering Lab#3
 
Programming with c language practical manual
Programming with c language practical manualProgramming with c language practical manual
Programming with c language practical manual
 
Matlab-3.pptx
Matlab-3.pptxMatlab-3.pptx
Matlab-3.pptx
 
C++
C++C++
C++
 
7 compiler lab
7 compiler lab 7 compiler lab
7 compiler lab
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
 
Lex (lexical analyzer)
Lex (lexical analyzer)Lex (lexical analyzer)
Lex (lexical analyzer)
 
Lecture 01 2017
Lecture 01 2017Lecture 01 2017
Lecture 01 2017
 
Lex tool manual
Lex tool manualLex tool manual
Lex tool manual
 
cmp104 lec 8
cmp104 lec 8cmp104 lec 8
cmp104 lec 8
 
(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net(1) c sharp introduction_basics_dot_net
(1) c sharp introduction_basics_dot_net
 
Complete C programming Language Course
Complete C programming Language CourseComplete C programming Language Course
Complete C programming Language Course
 
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docxCS 23001 Computer Science II Data Structures & AbstractionPro.docx
CS 23001 Computer Science II Data Structures & AbstractionPro.docx
 
C Tutorials
C TutorialsC Tutorials
C Tutorials
 
c.ppt
c.pptc.ppt
c.ppt
 
(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language(1) cpp introducing the_cpp_programming_language
(1) cpp introducing the_cpp_programming_language
 
Introduction Of C++
Introduction Of C++Introduction Of C++
Introduction Of C++
 
MATLAB Programming
MATLAB Programming MATLAB Programming
MATLAB Programming
 
Chap 2 c++
Chap 2 c++Chap 2 c++
Chap 2 c++
 

Recently uploaded

CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxGaneshChakor2
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxSayali Powar
 
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...RKavithamani
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptxVS Mahajan Coaching Centre
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxNirmalaLoungPoorunde1
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991RKavithamani
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppCeline George
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Sapana Sha
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformChameera Dedduwage
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxRoyAbrique
 

Recently uploaded (20)

CARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptxCARE OF CHILD IN INCUBATOR..........pptx
CARE OF CHILD IN INCUBATOR..........pptx
 
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptxPOINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
POINT- BIOCHEMISTRY SEM 2 ENZYMES UNIT 5.pptx
 
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
Privatization and Disinvestment - Meaning, Objectives, Advantages and Disadva...
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Employee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptxEmployee wellbeing at the workplace.pptx
Employee wellbeing at the workplace.pptx
 
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdfTataKelola dan KamSiber Kecerdasan Buatan v022.pdf
TataKelola dan KamSiber Kecerdasan Buatan v022.pdf
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
 
URLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website AppURLs and Routing in the Odoo 17 Website App
URLs and Routing in the Odoo 17 Website App
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
 

6 compiler lab - 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