关于文法的总结报告

来源:互联网 发布:中国大数据产业生态 编辑:程序博客网 时间:2024/05/01 11:07

       首先,交代自己三句话。

第一句话,这篇文字不要开头。

第二句话,直接跳过LL1)从LR0)开始。

第三句话,为了节省时间,只有精简记录。

OK,基于以上的内容,可以从LR0)开始了。

 

众所周知,LR0),SLR1),LR1,LALR1)四个文法都属于自底向上文法的的各种子类,区别不大。简要的说明就是:

LR(0)没有先行判别,只依赖当前输入串的字符来判断进行移进规约动作。

SLR(1)存在了先行,但行为上也就是比LR(0)进步了这么一点,但是应用FOLLOW的从而求得先行的想法是相当明智的。

LR(1)直接将先行记录到状态当中。这里引用《编译器工程》里的阐述:对于每一种情况,项目出现在某个语法分析器状态相关的集合的事实表明,语法分析器已检查过的输入与文法中一个A后面跟一个a的出现是一致的。

#简注一笔:LR(1)将先行引入状态有以下几个方面可以注意:1,移进动作的判断与先行仍然没有太多关系(?);2,使判断归约更为方便——一旦某个包含了完整项目的状态遇到项目中相应的先行时,即可以立即判断归约。(小推测一下,这就相对于SLR(1)的判断归约手段更为透明,因为先行是可以从输入串当中看到的,这至少可以削去一些移进归约冲突,不过这个观点也有待验证

LALR(1) 更向是结合了LR(0)LR(1)的一个折衷方案,与LR(1)最大的区别就是在于一个状态当总中的一个项目可以容纳多个先行,(因为这些先行都发生同一性质的归约),这样一来将使得分析表变小,以便更快的分析。

 

简单的归纳到此为止,我想估计不能再简单了。整本书两百多页的内容只是这样草率的总结似乎并不像话。不过也只能如此了。想想当时为了啃书的时候还写了十几页幼稚的笔记,美其名曰算是以文字代替思考,现在想起来,更向是自己对自己的喃喃自语以求心安罢了。

文章不长,也许要用上待续二字。

恩,待续。