Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads...
Transcript of Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads...
![Page 1: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/1.jpg)
CS315 Programming Languages © Pinar Duygulu
1
Lexa tool for Lexical Analysis
CS 315 – Programming LanguagesPinar Duygulu
Bilkent University
![Page 2: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/2.jpg)
CS315 Programming Languages © Pinar Duygulu
2
Lexical and syntactic analysis
Input stream Lexical analyser Syntactic analyser
(parser)parse tree
Lexical analyzer: scans the input stream and converts sequences of characters into tokens.Token: a classification of groups of characters.
Lexeme TokenSum IDfor FOR:= ASSIGN_OP= EQUAL_OP57 INTEGER_CONST* MULT_OP, COMMA( LEFT_PAREN
Lex is a tool for writing lexical analyzers.
Syntactic Analysis (Parsing):Parser: reads tokens and assembles them into language constructs using the grammar rules of the language.
Yacc is a tool for constructing parsers.
Stream of tokens
![Page 3: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/3.jpg)
CS315 Programming Languages © Pinar Duygulu
3
IntroductionLex• reads in a collection of regular expressions, and uses it to write a
C or C++ program that will perform lexical analysis. This program is almost always faster than one you can write by hand.
Yacc • reads in the output from lex and parses it using its own set of
regular expression rules. This is almost always slower than a hand written parser, but much faster to implement. Yacc stands for “Yet Another Compiler Compiler”.
![Page 4: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/4.jpg)
CS315 Programming Languages © Pinar Duygulu
4
Using lex and yacc tools
![Page 5: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/5.jpg)
CS315 Programming Languages © Pinar Duygulu
5
Running lex
On knuth.ug.bcc.bilkent.edu.tr typelex mylex.lit will create lex.yy.cthen typegcc -o mylex lex.yy.c -lfl
The freeware versions of lex is called “flex”
![Page 6: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/6.jpg)
CS315 Programming Languages © Pinar Duygulu
6
Lex
In lex, you provide a set of regular expressions and the action that should be taken with each.
Contents of a lex program :Definitions%%Regular expressions and associated actions (rules)%%User routines
![Page 7: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/7.jpg)
CS315 Programming Languages © Pinar Duygulu
7
Contents of a lex specification file
Definitions%%Regular expressions and associated actions (rules)%%User routines
![Page 8: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/8.jpg)
CS315 Programming Languages © Pinar Duygulu
8
The Simplest lex Program (ex0.l)
%%%%
alternatively%%.|\n ECHO;%% What does it do?
Important note: Do not leave extra spaces and/or empty lines at the end of the lex specification file.
![Page 9: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/9.jpg)
CS315 Programming Languages © Pinar Duygulu
9
The Simplest lex Program($ is the unix prompt)$emacs ex0.l(alternatively vi ex1.1 or use your favorite editor)$lsex0.l$cat ex0.l%%.|\n ECHO;$lex ex0.l$lsex0.l lex.yy.c$gcc -o ex0 lex.yy.c -lfl$lsex0 ex0.l lex.yy.c
![Page 10: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/10.jpg)
CS315 Programming Languages © Pinar Duygulu
10
The Simplest lex Program (ex0.l)
$vi test0$cat test0ali veli
$ cat test0 | ex0 (or $ex0 < test0)aliveli
![Page 11: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/11.jpg)
CS315 Programming Languages © Pinar Duygulu
11
Another lex program (ex1.l)%%zippy printf(“I RECOGNIZED ZIPPY”);
$cat test1zippyali zipveli and zippy herezipzippyZIP
$cat test1 | ex1I RECOGNIZED ZIPPYali zipveli and I RECOGNIZED ZIPPY herezipI RECOGNIZED ZIPPYZIP
![Page 12: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/12.jpg)
CS315 Programming Languages © Pinar Duygulu
12
Another lex program (ex2.l)
%%zip printf(“ZIP”);zippy printf(“ZIPPY”);
$cat test1 | ex2ZIPPYali ZIPveli and ZIPPY hereZIPZIPPY
• Lex matches the input string the longest regular expression possible
![Page 13: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/13.jpg)
CS315 Programming Languages © Pinar Duygulu
13
Another lex program (ex3.l)
%%monday|tuesday|wednesday|thursday|friday|saturday|sunday printf("<%s is a day.>",y
ytext);
$cat test3today is wednesday september 27
today is <wednesday is a day> september 27
• Lex declares an external variable called yytext which contains the matched string
![Page 14: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/14.jpg)
CS315 Programming Languages © Pinar Duygulu
14
Designing PatternsDesigning the proper patterns in lex can be very tricky, but you are provided with a broad range of options for your regular expressions.
. A dot will match any single character except a newline.
*,+ Star and plus used to match zero/one or more of the preceding expressions.
? Matches zero or one copy of the preceding expression.
![Page 15: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/15.jpg)
CS315 Programming Languages © Pinar Duygulu
15
Designing Patterns
| A logical ‘or’ statement - matches either the pattern before it, or the pattern after.
^ Matches the very beginning of a line.
$ Matches the end of a line.
/ Matches the preceding regular expression, but only if followed by the subsequent expression.
![Page 16: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/16.jpg)
CS315 Programming Languages © Pinar Duygulu
16
Designing Patterns
[ ] Brackets are used to denote a character class, which matches any single character within the brackets. If the first character is a ‘^’, this negates the brackets causing them to match any character except those listed. The ‘-’ can be used in a set of brackets to denote a range. C escape sequences must use a ‘\’.
“ ” Match everything within the quotes literally - don’t use any special meanings for characters.
( ) Group everything in the parentheses as a single unit for the rest of the expression.
![Page 17: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/17.jpg)
CS315 Programming Languages © Pinar Duygulu
17
Patterns – Regular expressions
• a matches a• abc matches abc• [abc] matches a, b or c• [a-f] matches a, b, c, d, e, or f• [0-9] matches any digit• X+ mathces one or more of X• X* mathces zero or more of X• [0-9]+ matches any integer• (…) grouping an expression into a single unit• | alternation (or)• (a|b|c)* is equivalent to [a-c]*
![Page 18: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/18.jpg)
CS315 Programming Languages © Pinar Duygulu
18
Regular expressions in Lex (cont)
• X? X is optional (0 or 1 occurrence)• if(def)? matches if or ifdef (equivalent to if|ifdef)• [A-Za-z] matches any alphabetical character• . matches any character except newline character• \. matches the . character• \n matches the newline character• \t matches the tab character• \\ matches the \ character• [ \t] matches either a space or tab character• [^a-d] matches any character other than a,b,c and d
![Page 19: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/19.jpg)
CS315 Programming Languages © Pinar Duygulu
19
Examples
• Real numbers, e.g., 0, 27, 2.10, .17– [0-9]*(\.)?[0-9]+
• To include an optional preceding sign: – [+-]?[0-9]*(\.)?[0-9]+
• Integer or floating point number– [0-9]+(\.[0-9]+)?
• Integer, floating point, or scientific notation. – [+-]?[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?
![Page 20: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/20.jpg)
CS315 Programming Languages © Pinar Duygulu
20
A slightly more complex program (ex4.l)%%[\t ]+ ;monday|tuesday|wednesday|thursday|friday|saturday|sunday printf("%s is a day.",yytext);[a-zA-Z]+ printf("<%s is not a day.>", yytext);
![Page 21: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/21.jpg)
CS315 Programming Languages © Pinar Duygulu
21
A tiny bit more… (ex5.l)%%[\t ]+ ;Monday|Tuesday|Wednesday|Thursday|Friday printf("%s is a week day.",yytext); Saturday|Sunday printf("%s is a weekend.",yytext); [a-zA-Z]+ printf("%s is not day.",yytext);
![Page 22: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/22.jpg)
CS315 Programming Languages © Pinar Duygulu
22
Structure of a lex program
Notice that all of the lex programs seem to have three sections, separated by a pair of percent signs “%%”. Section one is the definition section. Here we introduce any code that we want at the top of the C program.
Section two is the rules section. Here we link patterns with the action that they should trigger.
Section three is the user sub-routines section. Lex will copy these sub-routines after the code it generates.
![Page 23: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/23.jpg)
CS315 Programming Languages © Pinar Duygulu
23
Definitions%%[+-]?[0-9]*(\.)?[0-9]+ printf("FLOAT");
The same lex specification can be written as:digit [0-9]%%[+-]?{digit}*(\.)?{digit}+ printf("FLOAT");
input: ab7.3c--5.4.3+d++5output: abFLOATc-FLOATFLOAT+d+FLOAT
![Page 24: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/24.jpg)
CS315 Programming Languages © Pinar Duygulu
24
Definitions
digit [0-9]sign [+-]%%float val;{sign}?{digit}*(\.)?{digit}+ {sscanf(yytext, "%f", &val);
printf(">%f<", val);}
Input Outputali-7.8veli ali>-7.800000<veliali--07.8veli ali->-7.800000<veli+3.7.5 >3.700000<>0.500000<
![Page 25: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/25.jpg)
CS315 Programming Languages © Pinar Duygulu
25
Definitions
/* echo-uppercase-words.l */%%[A-Z]+[ \t\n\.\,] printf("%s",yytext);. ; /* no action specified */
• The scanner for the specification above echo all strings of capital letters, followed by a space tab (\t)or newline (\n) dot (\.) or comma (\,) to stdout, and all other characters will be ignored.
Input OutputAli VELI A7, X. 12 VELI X.HAMI BEY a HAMI BEY
![Page 26: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/26.jpg)
CS315 Programming Languages © Pinar Duygulu
26
Definitions
Definitions can be used in definitions
/* def-in-def.l */alphabetic [A-Za-z]digit [0-9]alphanumeric ({alphabetic}|{digit})%%{alphabetic}{alphanumeric}* printf("Variable");\, printf("Comma");\{ printf("Left brace");\:\= printf("Assignment");
![Page 27: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/27.jpg)
CS315 Programming Languages © Pinar Duygulu
27
User rules
The user sub-routines section is for any additional C or C++ code that you want to include. The only required line is:
main() { yylex(); }
This is the main function for the resulting program. Lex builds the yylex() function that is called, and will do all of the work for you.
Other functions here can be called from the rules section
![Page 28: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/28.jpg)
CS315 Programming Languages © Pinar Duygulu
28
Rule order
• If more than one regular expression match the same string the one that is defined earlier is used.
• /* rule-order.l */• %%• for printf("FOR");• [a-z]+ printf("IDENTIFIER");
• for input• for count := 1 to 10• the output would be• FOR IDENTIFIER := 1 IDENTIFIER 10
![Page 29: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/29.jpg)
CS315 Programming Languages © Pinar Duygulu
29
Rule order
However, if we swap the two lines in the specification file:%%[a-z]+ printf("IDENTIFIER");for printf("FOR");for the same inputthe output would beIDENTIFIER IDENTIFIER := 1 IDENTIFIER 10
![Page 30: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/30.jpg)
CS315 Programming Languages © Pinar Duygulu
30
Example Number Identifications (ex6.l)
%%[\t ]+ /* Ignore Whitespace */;
[+-]?[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?printf(" %s:number", yytext)
[a-zA-Z]+printf(" %s:NOT number", yytext)%%main() { yylex(); }
![Page 31: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/31.jpg)
CS315 Programming Languages © Pinar Duygulu
31
Tracking line numbers (ex7.l)%{ int line_num = 1;%}%%[\t ]+ /* Ignore Whitespace */;
\n { line_num++; }
[+-]?[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)? printf(“line_num:%d\n" yytext);%%main() { yylex(); }
![Page 32: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/32.jpg)
CS315 Programming Languages © Pinar Duygulu
32
More patterns…
What about literal strings?
Does this work? \".*\"What about: \"[^\"]*\"We need to use: \"[^\"\n]*\"
![Page 33: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/33.jpg)
CS315 Programming Languages © Pinar Duygulu
33
Counting Words (ex8.l)%{int char_count = 0;int word_count=0;int line_count=0;%}word [^ \t\n]+eol \n%%{word} {word_count++; char_count+=yyleng;}{eol} {char_count++; line_count++;}. char_count++;%%main() {yylex();printf("line_count = %d , word_count = %d, char_count = %d\n", line_count, word_count, char_count);}
![Page 34: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/34.jpg)
CS315 Programming Languages © Pinar Duygulu
34
Counting words (cont)
$ cat test8how many wordsand how many linesare therein this file
ex8 < test8line_count = 5 , word_count = 12,char_count = 61
![Page 35: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/35.jpg)
CS315 Programming Languages © Pinar Duygulu
35
(ex9.l)
%% int k;-?[0-9]+ { k = atoi(yytext); printf("%d", k%7 == 0 ? k+3 : k+1) ;}-?[0-9\.]+ ECHO;[A-Za-z][A-Za-z0-9]+ printf(“<%s>",yytext);
%%
![Page 36: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/36.jpg)
CS315 Programming Languages © Pinar Duygulu
36
ex10.lint lengs[100];%%[a-z]+ {lengs[yyleng]++ ; if(yyleng==1) printf(“<%s> ", yytext); }. |\n ;%%yywrap(){ int i;printf("Lenght No. words\n");for(i=0; i<100; i++) if(lengs[i] >0)
printf("%5d%10d\n", i, lengs[i]);return(1) ;}
yywrap is called whenever lex reaches an end-of-file
![Page 37: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/37.jpg)
CS315 Programming Languages © Pinar Duygulu
37
ex11.l (sets)
• space [ \t]*• alphabetic [A-Za-z]• digit [0-9]• alphanumeric ({alphabetic}|{digit})• element {space}{alphanumeric}+{space}• %%• \<\- printf("ASSIGNMENT ");• \= printf("EQUALS ");• \<\> printf("NOT-EQUALS");• \< printf("LESS-THAN ");• \+ printf("UNION ");• \* printf("INTERSECTION ");• [Ww][Hh][Ii][Ll][Ee] printf("WHILE ");• [Dd][Oo] printf("DO ");• {alphabetic}{alphanumeric}* printf("IDENTIFIER ");• \{(({element}\,)*{element})?{space}\} printf("SET ");• {space} ; /* skip spaces */
![Page 38: Lex a tool for Lexical Analysis - Bilkent Universityduygulu/Courses/CS315/Notes/Lex.pdfLex • reads in a collection of regular expressions, and uses it to write a C or C++ program](https://reader030.fdocuments.us/reader030/viewer/2022040413/5f09b4d37e708231d4282039/html5/thumbnails/38.jpg)
CS315 Programming Languages © Pinar Duygulu
38
ex12.l (comments)%{int comms=0 ;%}%%\/\*(.)+\*\/ {comms++; printf("COMMENT\n");}
. | \n printf(“%s”, yytext);%%yywrap(){printf("NO. of Comments = %d\n", comms);return(1) ;}