YACC(Bison) を使用して中置式を後置式に変換しようとしましたが、成功しませんでした。どうすればそれができるのか知りたいですか?サンプルコードは素晴らしいでしょう:)
11525 次
1 に答える
8
これが私の解決策です:
gram.l ファイル:
%{
#include"y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval=atoi(yytext); return NUM;}
\n return 0;
. return *yytext;
%%
int yywrap(){
return 1;
}
gram.y ファイル:
%{
#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/-
于 2012-11-25T22:32:39.423 に答える