//bison calc.y
//gcc calc.tab.c -ly
%{
#include <ctype.h>#include <stdio.h>
#define YYSTYPE double
%}
//对整个输入解析生成一个AST?
/*
(3);(3);
(3,3);();
(3,3,3,3,3);
*/
%token NUMBER
%left ',' //结合性,类似3+3+3+3如何处理,否则有shift/reduce冲突
%%
lines:lines fun ';' {printf ("%f\n", $2);} //lines fun而不是fun,否则只能解析一个句子
|lines '\n'{ printf("lines \n");}
|{printf("line empty\n");} //必须有,否则无法导出句子
;
fun: '(' expr ')'
{
printf("fun\n");
}
expr :
expr ',' expr{
printf(",\n");
}
| NUMBER
{ printf("num\n");}
|
{ printf("exp