手工打造编译器之语法分析器3
2010-11-28 11:17
134 查看
没想到写了快两个月的东西讲起来就是轻飘飘的两页。大概每天写了两个小时,代码我大概统计下有3000行到4000行之间。
复杂的地方在计算first,follow集合;LR分析引擎;文法这几部分。没写完一部分我都做了充分的测试,这些都是最终一气呵成,很少修改以前代码的原因。语法分析结束我也做了很多的测试,结果很满意,没想到根据LR分析引擎,绕到状态里面又绕出来到语法分析树上。状态比较抽象,而到语法分析树就清晰了。估计yacc之类的也做了类似的工作。一想到和yacc,甚至vc编译器,GNU编译器做类似的工作就感到很有成就感。
文法做了很多的修改,这部分我没有掌握,不知道文法的本质是什么样的,不知道什么样的文法是不产生冲突的。每改一点文法都要用LR分析引擎配上实际的tiger语言测试才知道。用这种笨办法才把文法设计出来,还加了我的一些特殊处理,如没有负数,不能处理-4等,我的要求是这些特殊处理不影响语言的特性,我给你了另一个替代方法。如负数可以用函数实现,要用负数的地方用neg(4)表示-4。
复杂的地方在计算first,follow集合;LR分析引擎;文法这几部分。没写完一部分我都做了充分的测试,这些都是最终一气呵成,很少修改以前代码的原因。语法分析结束我也做了很多的测试,结果很满意,没想到根据LR分析引擎,绕到状态里面又绕出来到语法分析树上。状态比较抽象,而到语法分析树就清晰了。估计yacc之类的也做了类似的工作。一想到和yacc,甚至vc编译器,GNU编译器做类似的工作就感到很有成就感。
文法做了很多的修改,这部分我没有掌握,不知道文法的本质是什么样的,不知道什么样的文法是不产生冲突的。每改一点文法都要用LR分析引擎配上实际的tiger语言测试才知道。用这种笨办法才把文法设计出来,还加了我的一些特殊处理,如没有负数,不能处理-4等,我的要求是这些特殊处理不影响语言的特性,我给你了另一个替代方法。如负数可以用函数实现,要用负数的地方用neg(4)表示-4。
相关文章推荐
- 手工打造编译器之语法分析器2
- 手工打造编译器之语法分析器1
- 手工打造编译器之语义分析1
- 手工打造编译器之词法分析1
- 手工打造编译器之语义分析2
- 手工打造编译器之词法分析2
- 手工打造编译器之词法分析器3
- 超越极限,手工打造C#编译器
- C--语言编译器语法分析完成,小小的记录一下
- Java jdbc事物回滚处理,纯手工打造
- dotty编译器语法特性之一λ类型和隐式函数类型
- IKONS – 赞!264 款手工打造的免费矢量图标
- 木马手工分析器
- Oracle 中手工创建数据库的语法
- 基于手工打造的卷积CNN的性别识别
- Maven基础原理、项目搭建(纯手工无IDE)、最基本语法
- dotty编译器语法特性之一枚举类型
- 扩展iQuery使其支持多种编程语言(二) – 兼编译器的语法分析简介
- 早期(编译器)优化--Java语法糖的味道
- SyntaxHighlighter配合CKEditor插件轻松打造代码语法着色