完成了语法分析, 那么这一阶段最后要讨论的就是如何生成抽象语法树了...这一阶段称之为语法翻译 : 那么我们来看看翻译的基本思想 : 其实现如下 : 下面是具体实例 : ...
分类:
其他好文 时间:
2016-05-27 21:51:47
阅读次数:
148
到这里词法分析模块就接近尾声了, 下面对词法分析模块进行总结 : 递归下降本质上也算是自顶向下的分析算法, 适合手工编码, 它相对来说更加灵活, 能够对于特定的DSL进行更加灵活的处理优化, 但是相对来说比较慢.而自动生成器则恰好相反, 接下来是一个LR(1)语法生成器的实例 -- YACC. 首先 ...
分类:
其他好文 时间:
2016-05-27 18:19:03
阅读次数:
181
那么最后我就来看看这个所谓的lr(0)分析表生成算法 : 这个算法乍一看好像又和前面脱节了, 但是如果仔细看之前的讲解, 比如下图, 仔细比较, 感受一下 ... 你会发现 : 每次产生的D其实就相当于是一个新的状态, 那么再看一下closure 和 goto的具体实现 : 不难发现closure其 ...
分类:
其他好文 时间:
2016-05-23 00:35:22
阅读次数:
154
下面来具体看一下这个算法(这边可能会有点跳跃, 但是仔细看的话还是能看出来之间的联系的) : 上面已经说了, 这个算法的核心思想就是移进和归约, 移进可以看出是图中自动机的状态转化过程, 但这里的转化并不需要弹出任何字符, 只需要讲状态与字符可以得到的新状态压入即可, 每一个状态都是一个推导式, 之 ...
分类:
其他好文 时间:
2016-05-22 23:22:07
阅读次数:
462
从这一节开始研究自底向上的分析算法, 该类分析算法分析能力更加强大, 其中目前广泛运用在实际当中的一类就是LR了.. 具体来讲LR是这样的... 注意这边LR, L指的是读入程序仍然是自左向右, 但是R指的是最右推倒, 如果右边的推导从下往上看的话, 你会发现其实就是最右推导... 接着来看一个更加 ...
分类:
其他好文 时间:
2016-05-22 23:07:50
阅读次数:
228
之前一节讲完了ll(1)分析算法的主要框架, 现在我们来看看冲突的处理...冲突处理的方式有很多种, 这里讲的这种叫做消除左递归... 右上文法是左递归文法, 你会发现任何一个左递归文法都不是ll(1)的, 为什么呢 ? 比如你看文法的第0条和第1条, 分别可以写成 : E = T + T + T ...
分类:
其他好文 时间:
2016-05-22 15:08:35
阅读次数:
220
考试昨天下午就算考完了, SE考的好像不太理想啊, 概念多实践少的科目果然不适合我啊(复习的时候, 坚持不了5分钟就开始玩手机, 真是日了狗, 然后开始自责, 然后循环...) 唯一一个好消息是好像我dbi是年级最高分, 不过对于这种没什么技术含量的考试分的高低其实也没什么重要, 不挂科其实都还行吧 ...
分类:
其他好文 时间:
2016-05-22 00:36:40
阅读次数:
184
这两天都没更, 主要是马上要连着要考三门(16, 18, 20), 都没时间学编译器了, 等过了这段时间应该能有很多时间来搞这个, 之后我准备先把之前写的那个词法分析器生成器改造一下, 弄个最简版的正则引擎出来玩玩, 不过这些都是后话了, 今天似乎也没什么时间, 也就把这单元的作业写了一下... 代 ...
分类:
其他好文 时间:
2016-05-14 20:05:21
阅读次数:
173
然后就是, 递归下降分析算法(也算是自顶向下分析算法的一个子类(也算是改进))... 然后给出伪代码 ... 然而想象是美好的, 现实是残酷的 : 如上图, 真正要实现的时候却又遇到了问题, 那就是, 当读入第一个token时(此处显然是num), 发现无论是 E + T 和 T 都是可行的, 所以 ...
分类:
其他好文 时间:
2016-05-13 09:15:22
阅读次数:
153
接下来开始研究语法分析的具体实现 ... 总来说有两种 : 自顶向下 和 自底向上 ... 先来看看自顶向下 那么具体到底是怎么实现的呢 : 那么你可以发现, 其实算法实现的过程就是以最左推导的方式在遍历所有可能的情况, 同时遍历所使用的栈, 利用栈做了一个显式的遍历代替了递归... 值得注意的是( ...
分类:
其他好文 时间:
2016-05-13 09:05:31
阅读次数:
87