所以我完全是 Flex Bison 的新手。我正在尝试实现一个包含 (,),+,-,*,/ 的计算器程序。我已经创建了两个文件,.l 和 .y 这里的问题是当我运行程序时它没有生成 parser.tab.h 文件或 parser.tab.c 文件。因此没有输出,因为我需要用它来获得输出。
我试过这两个程序代码。
这是我的词法分析器文件(calculator.h)
%{
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include "parser.tab.h"
%}
%%
[ \t\n] /* ignore whitespace */
[0-9]+ { yylval = atoi(yytext); return INT; }
[()] { return yytext[0]; }
[-+*/] { return yytext[0]; }
. { yyerror("invalid character"); }
%%
int yywrap() {
return 1;
}
这是我的解析器文件(calculator.y)
%{
#include \<iostream\>
#include \<cstdlib\>
using namespace std;
extern "C" int yylex();
extern "C" int yyparse();
extern "C" void yyerror(const char\*);
extern "C" int yylineno;
int eval(int, char, int);
%}
%token INT
%left '+' '-'
%left '\*' '/'
%right UNARYMINUS
%%
expr: expr '+' term { $$ = $1 + $3; }
| expr '-' term { $$ = $1 - $3; }
| term
;
term: term '\*' factor { $$ = $1 \* $3; }
| term '/' factor { $$ = $1 / $3; }
| factor
;
factor: INT { $$ = $1; }
| '(' expr ')' { $$ = $2; }
| '-' factor %prec UNARYMINUS { $$ = -$2; }
;
%%
int main() {
yyparse();
return 0;
}
void yyerror(const char\* msg) {
cerr \<\< "Error: " \<\< msg \<\< " at line " \<\< yylineno \<\< endl;
exit(1);
}
几天来我真的卡住了,无法前进。如果可以,请帮助我。
提前致谢