文章目录
概述
在LR(k)文法中,L指对输入进行从左到右的扫描,R表示反向构造一个最右推导序列。k表示在做出语法分析决定时向前看k个输入符号。
常用的LR(k)文法包括:
- SLR:简单LR
- LR(1):规范LR
- LALR:向前看LR(Look ahead)
基本概念
移动-归约语法分析技术
- 移入shift:将下一个输入符号移到栈的顶端。
- 归约reduce
- 接受accept:宣布语法分析过程成功完成
- 报错error
冲突:
非LR文法中会存在移入/归约冲突或者归约/归约冲突。
(冲突一定发生在归约时)
SLR
SLR表驱动分析过程:
- 构造增广文法
- 状态内部扩展和状态之间的扩展
- 构建文法分析表
下面将根据分析过程依次讲述其中的概念。
增广文法
G的增广文法G’是在G中加上新开始符号S’和产生式S’->S而得到的文法。引入这个新的开始产生式的目的是告诉语法分析器何时应该停止语法分析并宣称接受输入符号串。
状态内部扩展
状态内部的扩展就是写出项集族的闭包(CLOSURE)
首先我们理解项的概念: