我一直在尝试使用YACC(Bison)将中缀表达式转换为后缀表达式,但没有成功。我想知道怎么做?示例代码非常棒:)
答案 0 :(得分:6)
这是我的解决方案:
%{
#include"y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext); return NUM;}
\n return 0;
. return *yytext;
%%
int yywrap(){
return 1;
}
%{
#include<stdio.h>
%}
%token NUM
%left '+' '-'
%left '*' '/'
%right NEGATIVE
%%
S: E {printf("\n");}
;
E: E '+' E {printf("+");}
| E '*' E {printf("*");}
| E '-' E {printf("-");}
| E '/' E {printf("/");}
| '(' E ')'
| '-' E %prec NEGATIVE {printf("-");}
| NUM {printf("%d", yylval);}
;
%%
int main(){
yyparse();
}
int yyerror (char *msg) {
return printf ("error YACC: %s\n", msg);
}
yacc -d gram.y
flex gram.l
cc lex.yy.c y.tab.c
./a.out
2+6*2-5/3
262*+53/-