上一篇基本介绍了一些知识,那么现在我们就尝试做一个简单的计算器
首先先写bison文件
test2yy.y
%{
#include <iostream>
using namespace std;
int yylex(); //只是一个声明
int yyerror(const char *); //必须要有
%}
%token <dv> Number
%type <dv> exp
%union {
double dv;
}
%left '+' '-'
%left '*' '/'
%%
main : main exp '\n' { cout << "Result : " << $2 << endl; }
|
;
exp : exp '+' exp { $$ = $1 + $3 }
| exp '-' exp { $$ = $1 - $3 }
| exp '*' exp { $$ = $1 * $3 }
| exp '/' exp { $$ = $1 / $3 }
| '(' exp ')' { $$ = $2 }
| Number { $$ = $1 }
;
%%
int yyerror(const char *emseg)
{
cout << "Error: " << emseg << endl;
}
int main()
{
yyparse();
}
在这里我们需要关注一些事情
bison默认第一个表达式