1. Counting number of lines , words etc. using Lex
%{
int nchar,word,line;
%}
%%
\n { line++; nchar++;}
[^ \t\n]+ { word++; nchar+=yyleng; }
. { nchar++; }
%%
int main()
{
yylex();
printf("%d\t%d\t%d\n",nchar,word,line);
return 0;
}
Execution steps:
1. lex filename.l
2. gcc lex.yy.c -ll
3. ./a.out
4. CTRL+D
2. Calculator using Lex and Yacc
// yacc file
%{
#include<stdio.h>
#include<stdlib.h>
void yyerror(char *s);
%}
%token NAME NUMBER
%%
statement:NAME '=' expression
| expression {printf("\n%d\n",$1);};
expression:expression '+' NUMBER {$$=$1+$3;}
| expression '-' NUMBER {$$=$1-$3;}
| expression '*' NUMBER {$$=$1*$3;}
| expression '/' NUMBER
{
if($3==0)
yyerror("Division by Zero");
else
$$=$1/$3;
}
|NUMBER {$$=$1;}
;
%%
int main()
{
while(yyparse());
}
yyerror(char *s)
{
fprintf(stdout,"\n%s",s);
}
// lex file
%{
#include<stdio.h>
#include<stdlib.h>
#include"y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext); return NUMBER;}
[ \t] {;}
\n return 0;
. return yytext[0];
%%
Execution steps:
1. yacc -d filename.y
2. lex filename.l
3. gcc lex.yy.c y.tab.c -ll
4. ./a.out
%{
int nchar,word,line;
%}
%%
\n { line++; nchar++;}
[^ \t\n]+ { word++; nchar+=yyleng; }
. { nchar++; }
%%
int main()
{
yylex();
printf("%d\t%d\t%d\n",nchar,word,line);
return 0;
}
Execution steps:
1. lex filename.l
2. gcc lex.yy.c -ll
3. ./a.out
4. CTRL+D
2. Calculator using Lex and Yacc
// yacc file
%{
#include<stdio.h>
#include<stdlib.h>
void yyerror(char *s);
%}
%token NAME NUMBER
%%
statement:NAME '=' expression
| expression {printf("\n%d\n",$1);};
expression:expression '+' NUMBER {$$=$1+$3;}
| expression '-' NUMBER {$$=$1-$3;}
| expression '*' NUMBER {$$=$1*$3;}
| expression '/' NUMBER
{
if($3==0)
yyerror("Division by Zero");
else
$$=$1/$3;
}
|NUMBER {$$=$1;}
;
%%
int main()
{
while(yyparse());
}
yyerror(char *s)
{
fprintf(stdout,"\n%s",s);
}
// lex file
%{
#include<stdio.h>
#include<stdlib.h>
#include"y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext); return NUMBER;}
[ \t] {;}
\n return 0;
. return yytext[0];
%%
Execution steps:
1. yacc -d filename.y
2. lex filename.l
3. gcc lex.yy.c y.tab.c -ll
4. ./a.out
No comments:
Post a Comment