Using lex-yacc check while loop statement in a C program
YACC FILE
Source Code:
%{
#include
void yyerror(char *);
int yylex();
%}
%token WHILE AND OR NTEQ EQ LT LTEQ GT GTEQ ID NUM
%%
whileloop : WHILE '(' cond ')' '{' '}' {printf("parsing successful");}
;
cond : scond
| scond logop cond
;
scond : nid
| nid relop nid
;
nid : ID
| NUM
;
logop : AND
| OR
;
relop : NTEQ
| EQ
| LT
| LTEQ
| GT
| GTEQ
;
%%
void yyerror(char *s)
{
printf("\nparsing err ");
}
int main()
{
yyparse();
return 0;
}
Lex FILE
Source Code:
%{
#include "y.tab.h"
void yyerror(char *);
%}
%%
"while" {return WHILE;}
"&&" {return AND;}
"||" {return OR;}
"!=" {return NTEQ;}
"==" {return EQ;}
"<" {return LT;}
"<=" {return LTEQ;}
">" {return GT;}
">=" {return GTEQ;}
[=,{}();] {return *yytext;}
[ \t\n]+ ;
[a-zA-Z_][a-zA-Z0-9_]* {return ID;}
[0-9]+ {return NUM;}
. {printf("\n\nlex err");}
%%
int yywrap()
{
return 1;
}
OUTPUT:
[cmsa@localhost whileloop]$ yacc -d while.y
[cmsa@localhost whileloop]$ lex while.l
[cmsa@localhost whileloop]$ cc lex.yy.c y.tab.c -o a
[cmsa@localhost whileloop]$ ./a
0 comments