要在您的計(jì)算機(jī)上安裝 Bison C++ 編譯器,請(qǐng)按照以下步驟操作:
bison --version
如果未安裝 Bison,請(qǐng)?jiān)L問(wèn) GNU Bison 官方網(wǎng)站 并按照說(shuō)明進(jìn)行安裝。對(duì)于大多數(shù)操作系統(tǒng),您可以使用包管理器(如 apt、yum 或 brew)輕松地安裝 Bison。例如,在 Ubuntu 或 Debian 系統(tǒng)上,您可以運(yùn)行以下命令:
sudo apt-get install bison
sudo apt-get install g++
%{
#include<iostream>
using namespace std;
extern "C" int yylex();
void yyerror(const char *s) {
cout << "Error: " << s << endl;
}
%}
%union { int val; }
%token <val> NUM
%type <val> exp
%%
exp: exp '+' NUM { $$ = $1 + $3; }
| exp '-' NUM { $$ = $1 - $3; }
| NUM { $$ = $1; }
;
%%
int main() {
yyparse();
return 0;
}
extern "C" int yywrap() {
return 1;
}
calc.y
。然后,使用 Bison 生成 C++ 代碼:bison -d calc.y
這將生成兩個(gè)文件:calc.tab.cpp
(包含 Bison 生成的解析器代碼)和 calc.tab.hpp
(包含 Bison 生成的頭文件)。
lexer.l
的 Flex 文件,用于詞法分析:%{
#include "calc.tab.hpp"
%}
%%
[0-9]+ { yylval.val = atoi(yytext); return NUM; }
\+ { return '+'; }
\- { return '-'; }
[ \t] { /* ignore whitespace */ }
. { yyerror("Invalid character"); }
%%
flex lexer.l
這將生成一個(gè)名為 lex.yy.c
的文件,其中包含 Flex 生成的詞法分析器代碼。
g++ -o calc calc.tab.cpp lex.yy.c
calc
來(lái)計(jì)算算術(shù)表達(dá)式。例如:./calc
這將啟動(dòng)一個(gè)交互式會(huì)話,您可以在其中輸入算術(shù)表達(dá)式并查看結(jié)果。