SLR (1) 分析2025年7月15日 | 阅读 5 分钟 SLR (1) 指的是简单的 LR 分析。 它与 LR(0) 分析相同。 唯一的区别在于分析表。要构造 SLR (1) 分析表,我们使用 LR (0) 项的规范集合。 在 SLR (1) 分析中,我们仅将归约动作放置在左侧的 follow 集中。 SLR (1) 分析中涉及的各种步骤
SLR (1) 表构造以下是构造 SLR (1) 表的步骤 如果状态 (Ii) 在终结符上进入某个其他状态 (Ij),则它对应于动作部分中的移入动作。 ![]() 如果状态 (Ii) 在变量上进入某个其他状态 (Ij),则它对应于 Go to 部分中的 go to 动作。 ![]() 如果状态 (Ii) 包含最终项,例如 A → ab•,它没有到下一个状态的转换,那么该产生式被称为归约产生式。 对于 FOLLOW (A) 中的所有终结符 X,写入包含其产生式编号的归约条目。 示例![]() SLR ( 1 ) 文法S → E 添加增广产生式,并在 G 中每个产生式的第一个位置插入 '•' 符号 S` → •E I0 状态 将增广产生式添加到 I0 状态并计算闭包 I0 = Closure (S` → •E) 将所有以 E 开头的产生式添加到 I0 状态,因为 "." 后面跟着非终结符。 因此,I0 状态变为 I0 = S` → •E 将所有以 T 和 F 开头的产生式添加到修改后的 I0 状态,因为 "." 后面跟着非终结符。 因此,I0 状态变为。 I0= S` → •E I1= Go to (I0, E) = closure (S` → E•, E → E• + T) 将所有以 T 和 F 开头的产生式添加到 I5 状态,因为 "." 后面跟着非终结符。 因此,I5 状态变为 I5 = E → E +•T Go to (I5, F) = Closure (T → F•) = (与 I3 相同) I6= Go to (I2, *) = Closure (T → T * •F) 将所有以 F 开头的产生式添加到 I6 状态,因为 "." 后面跟着非终结符。 因此,I6 状态变为 I6 = T → T * •F Go to (I6, id) = Closure (F → id•) = (与 I4 相同) I7= Go to (I5, T) = Closure (E → E + T•) = E → E + T• 绘制 DFA![]() SLR (1) 表![]() 说明First (E) = First (E + T) ∪ First (T)
SLR(1) 分析的优点
关于 SLR(1) 分析表经常被问到的问题1. 列出 SLR(1) 分析表的应用? 答案:以下是 SLR(1) 分析表的各种应用列表
2. SLR 解析器的缺点是什么? 答案: SLR 解析器的主要缺点是它只能处理属于 SLR(1) 类别的文法。 3. 列出构造 SLR 分析表的步骤? 答案
4. SLR 和 LR 分析表之间的主要区别是什么? 答案: SLR(1) 类似于 LR(0) 分析,因为它只需要规范项来构造分析表,但它们之间的主要区别是移入-归约冲突的可能性。 这可以通过将“归约”存储在终结符状态中来解决,该状态对应于产生式 LHS 的 FOLLOW 集。 此项目集合称为 SLR(1) 分析,用于创建包含提供给文法的表,以表示每个状态的闭包和 goto 操作。 下一个主题CLR (1) 分析 |
我们请求您订阅我们的新闻通讯以获取最新更新。