编译原理之语法分析(自底向上)(包含源码)

自底向上

基本概念

自底向上形成语法树的过程就是及逆行归约,将一堆单词串放在一起,形成某个产生式的样子,然后规约成某个产生式,所以关键就是什么时候进行产生式的归约。

在这里插入图片描述在这里插入图片描述

算符优先

在这里插入图片描述
这里要注意的就是优先级的比较,比如a<b一定式意味着a会先出现在b的前面,而前后体现在树上就是a一定在b的左边,不管是树的左上方还是左下方,所以,我们对于一棵树的遍历也应该知道,一定是先左后右。

而且,两个终结符(不局限于运算符)比较的时候不代表中间没有别的终结符中间可以有很多终结符,但是他们最后可以不断规约为一个非终结符,使得两个符号碰在一起,所以,能不能碰到一起这个判定一定式通过文法自行判定的。

在这里插入图片描述句柄的寻找就是在两个终结符中间的一串,当我们遇到栈顶的符号优先级大于输入缓冲区中的符号的时候,我们需要在栈中寻找,找到优先级小于当前栈顶符号的符号,找到之后,真正的符号串应该是不包含找到的这个符号,从这个符号开始,知道当前栈中的所有字符,也就是意味着,栈中的字符不仅仅式非终结符,还应该包括终结符

SLR

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里面的goto函数对应的都是移进的动作,如果某个状态包含.在最后的,就对应着归约动作,归约写在产生式左部非终结符的follow集列中

规范LR

规范LR的SLR的区别就是规范LR明确的规定了规约动作应该在什么时候出现,而不仅仅是在follow集合之后

这个末尾的字符的产生就是后面的first集合,这个是只有在.后面的是非终结符会产生新的产生式,这个时候,新产生式的末尾跟的就是原本这个非终结符后面的first集合

在这里插入图片描述在这里插入图片描述

LALR

LALR在原本的基础上增加了同心的概念,在LR(1)项目集中,如果一个项目中的所有产生式都一样,只是产生式后面的搜索符不一样的话,可以将二者合并。

在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页