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

Reactive Programming with Cassandra
Reactive Programming with CassandraReactive Programming with Cassandra
Reactive Programming with CassandraCédrick Lunven
 
Introduction to simulink (1)
Introduction to simulink (1)Introduction to simulink (1)
Introduction to simulink (1)Memo Love
 
Operator overloading in C++
Operator  overloading in C++Operator  overloading in C++
Operator overloading in C++BalajiGovindan5
 
1 - Introduction to Compilers.ppt
1 - Introduction to Compilers.ppt1 - Introduction to Compilers.ppt
1 - Introduction to Compilers.pptRakesh Kumar
 
basics of compiler design
basics of compiler designbasics of compiler design
basics of compiler designPreeti Katiyar
 
Algorithm and Flowcharts
Algorithm and FlowchartsAlgorithm and Flowcharts
Algorithm and FlowchartsSURBHI SAROHA
 
Asymptotic Notations.pptx
Asymptotic Notations.pptxAsymptotic Notations.pptx
Asymptotic Notations.pptxSunilWork1
 
Intermediate code generation (Compiler Design)
Intermediate code generation (Compiler Design)   Intermediate code generation (Compiler Design)
Intermediate code generation (Compiler Design) Tasif Tanzim
 
Cd ch1 - introduction
Cd   ch1 - introductionCd   ch1 - introduction
Cd ch1 - introductionmengistu23
 
Compiler Design
Compiler DesignCompiler Design
Compiler DesignMir Majid
 
C programming for problem solving
C programming for problem solving  C programming for problem solving
C programming for problem solving Anuradha Moti T
 
Compiler design syntax analysis
Compiler design syntax analysisCompiler design syntax analysis
Compiler design syntax analysisRicha Sharma
 
Traveling salesman problem
Traveling salesman problemTraveling salesman problem
Traveling salesman problemJayesh Chauhan
 
Algorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to AlgorithmsAlgorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to AlgorithmsMohamed Loey
 
Daa:Dynamic Programing
Daa:Dynamic ProgramingDaa:Dynamic Programing
Daa:Dynamic Programingrupali_2bonde
 

What's hot (20)

Reactive Programming with Cassandra
Reactive Programming with CassandraReactive Programming with Cassandra
Reactive Programming with Cassandra
 
Matrix multiplication
Matrix multiplicationMatrix multiplication
Matrix multiplication
 
Introduction to simulink (1)
Introduction to simulink (1)Introduction to simulink (1)
Introduction to simulink (1)
 
Operator overloading in C++
Operator  overloading in C++Operator  overloading in C++
Operator overloading in C++
 
c-programming
c-programmingc-programming
c-programming
 
Inline functions
Inline functionsInline functions
Inline functions
 
1 - Introduction to Compilers.ppt
1 - Introduction to Compilers.ppt1 - Introduction to Compilers.ppt
1 - Introduction to Compilers.ppt
 
Introduction to algorithms
Introduction to algorithmsIntroduction to algorithms
Introduction to algorithms
 
basics of compiler design
basics of compiler designbasics of compiler design
basics of compiler design
 
Algorithm and Flowcharts
Algorithm and FlowchartsAlgorithm and Flowcharts
Algorithm and Flowcharts
 
Asymptotic Notations.pptx
Asymptotic Notations.pptxAsymptotic Notations.pptx
Asymptotic Notations.pptx
 
Intermediate code generation (Compiler Design)
Intermediate code generation (Compiler Design)   Intermediate code generation (Compiler Design)
Intermediate code generation (Compiler Design)
 
Cd ch1 - introduction
Cd   ch1 - introductionCd   ch1 - introduction
Cd ch1 - introduction
 
Unit 3 daa
Unit 3 daaUnit 3 daa
Unit 3 daa
 
Compiler Design
Compiler DesignCompiler Design
Compiler Design
 
C programming for problem solving
C programming for problem solving  C programming for problem solving
C programming for problem solving
 
Compiler design syntax analysis
Compiler design syntax analysisCompiler design syntax analysis
Compiler design syntax analysis
 
Traveling salesman problem
Traveling salesman problemTraveling salesman problem
Traveling salesman problem
 
Algorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to AlgorithmsAlgorithms Lecture 1: Introduction to Algorithms
Algorithms Lecture 1: Introduction to Algorithms
 
Daa:Dynamic Programing
Daa:Dynamic ProgramingDaa:Dynamic Programing
Daa:Dynamic Programing
 

Similar to 6 compiler lab - Flex

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#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++
 
Csd01
Csd01Csd01
Csd01
 

Recently uploaded

General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...Poonam Aher Patil
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxJisc
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxheathfieldcps1
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsKarakKing
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jisc
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...Nguyen Thanh Tu Collection
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfNirmal Dwivedi
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17Celine George
 
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...Pooja Bhuva
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsMebane Rash
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseAnaAcapella
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSCeline George
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxAmanpreet Kaur
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - Englishneillewis46
 

Recently uploaded (20)

General Principles of Intellectual Property: Concepts of Intellectual Proper...
General Principles of Intellectual Property: Concepts of Intellectual  Proper...General Principles of Intellectual Property: Concepts of Intellectual  Proper...
General Principles of Intellectual Property: Concepts of Intellectual Proper...
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Salient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functionsSalient Features of India constitution especially power and functions
Salient Features of India constitution especially power and functions
 
Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)Jamworks pilot and AI at Jisc (20/03/2024)
Jamworks pilot and AI at Jisc (20/03/2024)
 
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
80 ĐỀ THI THỬ TUYỂN SINH TIẾNG ANH VÀO 10 SỞ GD – ĐT THÀNH PHỐ HỒ CHÍ MINH NĂ...
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
Beyond_Borders_Understanding_Anime_and_Manga_Fandom_A_Comprehensive_Audience_...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
Spellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please PractiseSpellings Wk 3 English CAPS CARES Please Practise
Spellings Wk 3 English CAPS CARES Please Practise
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptxSKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
SKILL OF INTRODUCING THE LESSON MICRO SKILLS.pptx
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 

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