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