lex 是自动生成词法分析器的工具,通过输入扩展名为.l的文件,输出词法分析器的C 语言代码。
flex是增强版的lex。
yacc是自动生成语法分析器的工具,通过输入扩展名为.y的文件,输出语法分析器的C语言代码。
bison是GNU项目所发布的yacc的功能扩充版。
myclac.l
myclac.y
注意:默认在MAC上编译会出现warning。需要在
#define YYDEBUG=1
下面添加
int yyerror(char const *str);
int yylex(void);
这2行。
同时该计算器不支持:-1+2 或者 2+-1 这种表达式
所以在
primary_expression
: DOUBLE_LITERAL
后面添加:
| SUB DOUBLE_LITERAL
{
$$ = -1 * $2;
}
;