While Loop

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

Share:

0 comments