Lex File
%{
#include<stdio.h>
#include"y.tab.h"
int
line=0;
%}
%%
[ \t]+ ;
int|float|char return DT;
main return
MAIN;
return return
RET;
if|for|while|else return KEYW;
[a-zA-Z][a-zA-Z0-9]* return ID;
[0-9]+ return
NUM;
[(){},;=] return
yytext[0];
\n line++;
[><>=<===] return AOP;
%%
yywrap()
{
return 1;
}
Yacc File
%{
#include<stdio.h>
extern
FILE *yyin;
extern
int line;
%}
%token DT NUM ID RET MAIN KEYW AOP
%%
Pdash:P {printf("\n
Parsing Done....No Syntax Error");}
P:DT MAIN '(' ')' '{' S R '}'
S:DS S
|ES S
|CS S
|
DS:DT V ';'
V:ID|V','ID
ES:ID'='E';'
E:NUM|ID
CS:KEYW '(' A ')' '{' S '}'
A:ID AOP ID|ID AOP NUM|';'';'
R :RET NUM';'
%%
int main()
{
yyin=fopen("input.txt","r");
yyparse();
}
yyerror()
{
printf("\n
Error at line no:%d",line);
}
Input text file
int main()
{
int
a,b,c;
b=4;
a=b;
if(a>2)
{
for(;;)
{
c=2;
}
}
return
0;
}
Output
student@ubuntu:~$ yacc -d parse.y
student@ubuntu:~$ lex lex1.l
student@ubuntu:~$ cc y.tab.c lex.yy.c
student@ubuntu:~$ ./a.out
Parsing Done....No Syntax Error
student@ubuntu:~$
No comments:
Post a Comment