Using lex-yacc check if statement in a C program
YACC FILE
Source Code:
%{
#include
void yyerror(char *);
int yylex();
%}
%token IF ELSE AND OR NTEQ EQ LT LTEQ GT GTEQ ID NUM
%%
if_stmt : ifp elsep {printf("parsing successful");}
;
ifp : IF '(' cond ')' '{' '}'
;
elsep : ELSE '{' '}'
;
cond : scond
| scond logop cond
;
scond : mid
| mid relop mid
;
mid : 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 *);
%}
%%
"if" {return IF;}
"else" {return ELSE;}
"&&" {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:
[cmsa1@localhost ifstatement]$ yacc -d if.y
[cmsa1@localhost ifstatement]$ lex if.l
[cmsa1@localhost ifstatement]$ cc y.tab.c lex.yy.c -o a
[cmsa1@localhost ifstatement]$ ./a<a1
parsing successful[cmsa1@localhost ifstatement]$
0 comments