摘要:
从分析树到语法树...什么意思呢, 就说这个图中其实很多节点是多余的, 比如左右括号, 还有从E到3其实可以直接由3代替E等等, 因为到了分析树这一阶段, 其实优先级结合性都已经由树的结构简介的体现出来了, 所以用于表示优先级结合性的括号, 以及分析过程中冗余的结构(3和4 上面的E)都不必要...
阅读全文
posted @ 2016-05-27 21:37
内脏坏了
阅读(375)
推荐(0)
编辑
摘要:
完成了语法分析, 那么这一阶段最后要讨论的就是如何生成抽象语法树了...这一阶段称之为语法翻译 : 那么我们来看看翻译的基本思想 : 其实现如下 : 下面是具体实例 :
阅读全文
posted @ 2016-05-27 20:47
内脏坏了
阅读(202)
推荐(0)
编辑
摘要:
接下来是这一节的习题 : 在这个题目中,你将实现一个简单的台式计算器。这个台式计算器的功能像在最后一个讲义中演示的例子一样:即用户可以在控制台上交互输入算术表达式,你的程序判断该表达式是否合法,不合法的话报错并退出运行。 你的程序涉及表达式的部分要支持如下的表达式: E -> n | E + E |
阅读全文
posted @ 2016-05-27 20:01
内脏坏了
阅读(181)
推荐(0)
编辑
摘要:
到这里词法分析模块就接近尾声了, 下面对词法分析模块进行总结 : 递归下降本质上也算是自顶向下的分析算法, 适合手工编码, 它相对来说更加灵活, 能够对于特定的DSL进行更加灵活的处理优化, 但是相对来说比较慢.而自动生成器则恰好相反, 接下来是一个LR(1)语法生成器的实例 -- YACC. 首先
阅读全文
posted @ 2016-05-27 17:31
内脏坏了
阅读(198)
推荐(0)
编辑
摘要:
上一节讲完了SLR(LL(0)改进算法)的由来, 我们来大致分析一下该算法的基本思想... 具体我们可以再来看一个冲突... 可以看到状态2中, 既可以移进也可以归约, 同时由于R的follow集中也存在=(R可以是L, L后面可以是=), 所以两种情况都无法避免... 为了解决这个冲突, 我们引出
阅读全文
posted @ 2016-05-27 13:41
内脏坏了
阅读(161)
推荐(0)
编辑
摘要:
最后我们来分析一下这个所谓的LR(0)分析算法... 图中第二个L应该是R, 然后所谓的0个前看符号我确实不太能够理解, 据说要和lr(1)比较了才知道, 接下来研究它的缺点(说实话感觉能分析的文法有限这不是ll(1)的缺点吗? 不说说lr类算法没有这类缺点吗? ) 接下来就是具体的错误分析实例了.
阅读全文
posted @ 2016-05-27 12:25
内脏坏了
阅读(163)
推荐(0)
编辑