文章目录
自顶向下解决该使用哪条产生式进行推导的问题
自底向上解决什么时候该移入,什么时候该规约的问题
核心问题
- 什么时候移入,什么时候规约
通过action表执行相应的移入规约动作
- 如何解决移入规约冲突
通过向前看一个字符,这个字符可以是非终结符的follow集,也可以是产生式的展望集
- LR(0),SLR(1),LR(1),LALR(1)的关系
见 概念->LALR分析器与LR分析器
概念
句柄
“句柄”: “正确的待规约对象”,即它能保证被归约后一定还保持着最右句型
- 短语,简单短语
- 一个短语,满足:被规约后,整个句子仍然保持最右句型。2.一个句型简单短语可能有多个,称最左简单短语为句柄。
- rm: 最右推导
- 规范句型(最右句型):通过最右推导或最左规约得到的句型
- 规范前缀:一个规范句型的前缀,且前缀后面不包括非终结符,如:
- 规范活前缀
就是在栈中可能出现的前缀。
满足:
如:
活前缀又分两种类型:归态活前缀、非归态(移入)活前缀
LR(k) 与LR文法
LR(k)
- L 表示最左扫描,R表示反向构造出最右推导,k 表示最多向前看 k 个符号
LR文法:
- 某一CFG能够构造一张分析表,使得表中每一元素至多只有一种 明确动作,则称改文法为LR文法
- 并非所有CFG都是LR文法,但对于多数程序设计语言,一般 都可以用LR文法描述;和LL(1)相比,LR分析适应的文法范围要 广一些
不同的LR方法对CFG的要求不一样, 能够分析的CFG多少也不一 样, L R ( 0 ) ⊆ S L R ( 1 ) ⊆ L A L R ( 1 ) ⊆ L R ( 1 ) LR(0) \subseteq SLR(1) \subseteq LALR(1) \subseteq LR(1) LR(0)⊆SLR(1)⊆