If Statement

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]$

Share:

0 comments