0% found this document useful (0 votes)
240 views5 pages

Ex 3

The document describes implementing a lexical analyzer using the LEX tool. It includes: 1. The LEX program has three parts - declarations, translation rules, and auxiliary procedures. Translation rules match patterns and specify actions. 2. The example LEX program recognizes keywords, identifiers, operators, comments, strings, and numbers in a C program. 3. The program is compiled with LEX to generate lex.yy.c, then compiled with CC to create an executable that is run on a test C program file. The output correctly identifies the lexical elements in the test file.

Uploaded by

Sherril Vincent
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
240 views5 pages

Ex 3

The document describes implementing a lexical analyzer using the LEX tool. It includes: 1. The LEX program has three parts - declarations, translation rules, and auxiliary procedures. Translation rules match patterns and specify actions. 2. The example LEX program recognizes keywords, identifiers, operators, comments, strings, and numbers in a C program. 3. The program is compiled with LEX to generate lex.yy.c, then compiled with CC to create an executable that is run on a test C program file. The output correctly identifies the lexical elements in the test file.

Uploaded by

Sherril Vincent
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Ex.

No:3 IMPLEMENTATION OF LEXICAL ANALYZER USING LEX


TOOL
AIM:
To write a C program to implement Lexical Analyzer using Lex Tool.
ALGORITHM:
1. Start the program.
2. Lex program consists of three parts. a.
Declaration %%
b. Translation rules %%
c. Auxilary procedure.
3. The declaration section includes declaration of variables, maintest, constants and
regular definitions.
4. Translation rule of lex program are statements of the form
a. P1 {action}
b. P2 {action}
c.
d.
e. Pn {action}
5. Write a program in the vi editor and save it with .l extension.
6. Compile the lex program with lex compiler to produce output file as
lex.yy.c. eg $ lexfilename.l $ cc
lex.yy.c -ll
7. Compile that file with C compiler and verify the output.
PROGRAM:
%{
/* program to recognize a c program */
int COMMENT=0;
%}
identifier [a-zA-Z][a-zA-Z0-9]*
%%
#.* { printf("\n%s is a PREPROCESSOR DIRECTIVE",yytext);}
int |
float |
char |
double |

while |
for |
do |
if |
break |
continue |
void |
switch |
case |
long |
struct |
const |
typedef |
return |
else |
goto {printf("\n\t%s is a KEYWORD",yytext);}
"/*" {COMMENT = 1;}
/*{printf("\n\n\t%s is a COMMENT\n",yytext);}*/
"*/" {COMMENT = 0;}
/* printf("\n\n\t%s is a COMMENT\n",yytext);}*/
{identifier}\( {if(!COMMENT)printf("\n\nFUNCTION\n\t%s",yytext);}
\{ {if(!COMMENT) printf("\n BLOCK BEGINS");}
\} {if(!COMMENT) printf("\n BLOCK ENDS");}
{identifier}(\[[0-9]*\])? {if(!COMMENT) printf("\n %s IDENTIFIER",yytext);}
\".*\" {if(!COMMENT) printf("\n\t%s is a STRING",yytext);}
[0-9]+ {if(!COMMENT) printf("\n\t%s is a NUMBER",yytext);}
\)(\;)? {if(!COMMENT) printf("\n\t");ECHO;printf("\n");}
\( ECHO;
= {if(!COMMENT)printf("\n\t%s is an ASSIGNMENT OPERATOR",yytext);}
\<= |
\>= |

\< |
== |
\> {if(!COMMENT) printf("\n\t%s is a RELATIONAL OPERATOR",yytext);}
%%
int main(intargc,char **argv)
{
if (argc> 1)
{
FILE *file;
file = fopen(argv[1],"r");
if(!file)
{
printf("could not open %s \n",argv[1]);
exit(0);
}
yyin = file;
}
yylex();
printf("\n\n");
return 0;
} intyywrap()
{
return 0;
}

INPUT:
$vivar.c
#include<stdio.h>
main()
{
inta,b;
}

OUTPUT:
$lexlex.l
$cc lex.yy.c
$./a.outvar.c
#include<stdio.h> is a PREPROCESSOR DIRECTIVE
FUNCTION
main (
)
BLOCK BEGINS
int is a KEYWORD
a IDENTIFIER
b IDENTIFIER
BLOCK ENDS

RESULT:
Thus the program for implementing Lexical analyser using LEX tool is executed and verified.

You might also like