%{ #include #include #include %} %union { double dval; } %token TAL %token LOG EXP SQRT %left '-' '+' %left LOG EXP SQRT %left '*' '/' %right UMINUS %type expression %% statement_list: statement '\n' | statement_list statement '\n' ; statement: expression {printf("out \n");}; expression: expression '+' expression {printf("sum \n");} | expression '-' expression {printf("sub \n");} | expression '*' expression {printf("mul \n");} | expression '/' expression {if ($3 == 0.0) yyerror("divide dy zero"); else printf("div \n");} | '-' expression %prec UMINUS {printf("neg \n");} | '(' expression ')' {;} | LOG expression {printf("log \n");} | EXP expression {printf("exp \n");} | SQRT expression {printf("sqrt \n");} | TAL {printf("load %f \n", $$);}; %% int main() { yyparse(); }