For Loop

Using lex-yacc check for loop statement in a C program YACC FILE Source Code: %{ #include void yyerror(char *); int yylex(); %} %token FOR INC DEC AND OR NTEQ EQ LT LTEQ GT GTEQ ID NUM %% forloop : FOR '(' ass ';' cond ';' ass ')' '{' '}' {printf("parsing successful");} ; ass : ID opt ; opt : '=' e | INC | DEC ; e : e '+' t | t ; t : t '*' f | f ; f : '(' e ')' | nid ; 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 *); %} %% "for" {return FOR;} "++" {return INC;} "--" {return DEC;} "&&" {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 forloop]$ yacc -d for.y [cmsa1@localhost forloop]$ lex for.l [cmsa1@localhost forloop]$ cc y.tab.c lex.yy.c -o a [cmsa1@localhost forloop]$ ./a<a1 parsing successful[cmsa1@localhost forloop]$

Share:

0 comments