filename.tab.c 和 filename.tab.h 不使用 Flex Bison 生成计算器程序

问题描述 投票:0回答:0

所以我完全是 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);
}

几天来我真的卡住了,无法前进。如果可以,请帮助我。

提前致谢

parsing compilation bison flex-lexer lexer
© www.soinside.com 2019 - 2024. All rights reserved.