lex和yacc 入门-- 计算器
2016-03-05 12:23
232 查看
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;
}
;
from : http://my.oschina.net/jackin/blog/370414
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;
}
;
from : http://my.oschina.net/jackin/blog/370414
相关文章推荐
- linux学习之c语言swap函数
- 当滚动页面到一定程度时,页顶菜单浮动固定在页面顶部
- Python内存管理机制
- 用两个栈模拟一个队列
- uva10602 - Editor Nottoobad
- 关于自适应网站的总结
- JS面向对象组件(六) -- 拖拽功能以及组件的延展
- swift 调用第三方的oc 方法
- eclipse 快捷键
- leetcode:Two Sum 【Java】
- elasticsearch小记之—— unmapped_type的使用
- HDU 1535 SPFA 前向星存图优化
- 结转时数据进一步修正
- Redis 入门学习时不理解的问题
- 管理2
- p68 对数变换 关于fft2 fftshift 频谱
- Spring boot app动态更新数据库表
- eclipse中查看Android源代码
- C++ 17 的最新动态
- uva607