===== yacc_exp.y ===== %{ #include #include int valid = 1; int yylex(); int yyerror(char *s); %} %token num id %left '+' '-' %left '*' '/' %% E : E '+' E | E '-' E | E '*' E | E '/' E | '-' E | '(' E ')' | num | id ; %% int yyerror(char *s){ valid = 0; printf("\nInvalid expression!\n"); return 0; } int main(){ printf("Enter the expression:\n"); yyparse(); if (valid) printf("\nValid expression!\n"); return 0; } ===== yacc_exp.l ===== %{ #include "y.tab.h" %} %% [0-9]+ { return num; } [a-zA-Z_][a-zA-Z_0-9]* { return id; } [+\-*/()] { return yytext[0]; } [ \t\n] ; . { return yytext[0]; } %% int yywrap() { return 1; } ===== output.txt ===== Enter the expression: a+b*c Valid expression! ===== run ===== nano yacc_exp.l nano yacc_exp.y yacc -d yacc_exp.y lex yacc_exp.l gcc y.tab.c lex.yy.c -o yacc_exp -ll -ly ./yacc_exp