SLR 分析表示例:逻辑表达式 G[S] 的识别过程
SLR 分析表示例:逻辑表达式 G[S] 的识别过程
逻辑表达式 G[S]:
- S→ A
- A→ A∨B
- A→ B
- B→ B∧C
- B→ C
- C→┐D
- C→ D
- D→(A)
- D→a
其 SLR 分析表如下:
| 状态 | 动作 | GOTO | |---|---|---| | | | ┐ | ∨ | ∧ | a | ( | ) | # | A | B | C | D | | 0 | s5 | | | s7 | s6 | | | 1 | 2 | 3 | 4 | | 1 | | s8 | | | | | | a0 | | | | | | 2 | | r2 | s9 | | | r2 | r2 | | | | | | | 3 | | r4 | r4 | | | r4 | r4 | | | | | | | 4 | | r6 | r6 | | | r6 | r6 | | | | | | | 5 | | | | s7 | s6 | | | | | | 10 | | 6 | s5 | | | s7 | s6 | | | 11 | 2 | 3 | 4 | | 7 | | r8 | r8 | | | r8 | r8 | | | | | | | 8 | s5 | | | s7 | s6 | | | | 12 | 3 | 4 | | 9 | s5 | | | s7 | s6 | | | | | 13 | 4 | | 10 | | r5 | r5 | | | r5 | r5 | | | | | | | 11 | | s8 | | | | s14 | | | | | | | | 12 | | r1 | s9 | | | r1 | r1 | | | | | | | 13 | | r3 | r3 | | | r3 | r3 | | | | | | | 14 | | r7 | r7 | | | r7 | r7 | | | | | |
给出#(a∨┐a)∧a# 的识别过程:
| 步骤 | 栈内容 | 输入串 | 操作 | |---|---|---|---|| | 1 | #0 | (┐a∨a)∧a# | S6 | | 2 | #06 | ┐a∨a)∧a# | R2 | | 3 | #03 | ┐a∨a)∧a# | S9 | | 4 | #032 | a∨a)∧a# | R4 | | 5 | #03 | a∨a)∧a# | S9 | | 6 | #0322 | ∨a)∧a# | R4 | | 7 | #03 | ∨a)∧a# | S9 | | 8 | #0329 | a)∧a# | R6 | | 9 | #0326 | )∧a# | S7 | | 10 | #03267 | ∧a# | S5 | | 11 | #032675 | a# | R8 | | 12 | #0326A | A# | GOTO[6,A] | | 13 | #0326A1 | B# | GOTO[6,B] | | 14 | #0326A13 | D# | GOTO[6,D] | | 15 | #0326A134 | a# | R8 | | 16 | #0326A13D( | A# | GOTO[6,A] | | 17 | #0326A13D2 | B# | GOTO[6,B] | | 18 | #0326A13D34 | D# | GOTO[6,D] | | 19 | #0326A13D34) | C# | GOTO[3,C] | | 20 | #0326A13D3 | B# | GOTO[6,B] | | 21 | #0326A13D2 | C# | GOTO[3,C] | | 22 | #0326A13 | B∨ | D# | GOTO[6,B] | | 23 | #0326A1B∨ | A# | GOTO[6,A] | | 24 | #0326A | B∨ | D# | GOTO[6,B] | | 25 | #032B | A∨ | D# | GOTO[0,S] | | 26 | #0 | A∨ | D# | GOTO[1,A] | | 27 | #01 | A∨B∨ | D# | GOTO[2,B] | | 28 | #02 | A∨B∨C | D# | GOTO[3,C] | | 29 | #032 | A∨B∨C∧ | D# | GOTO[4,B] | | 30 | #03 | A∨B∨C∧D∧ | D# | GOTO[5,C] | | 31 | #03 | A∨B∨C∧D | # | R1 | | 32 | #0 | A∨B∨C∧D# | ACCEPT |
解释:
本例展示了如何使用 SLR 分析表识别逻辑表达式 #(a∨┐a)∧a#。识别过程从初始状态开始,根据当前状态和输入符号,选择相应的动作(移进或归约),直到输入串为空且栈内容为 #0,此时识别成功。
本例中,每个步骤都包含以下信息:
- 步骤: 识别过程的步骤序号
- 栈内容: 当前栈中的内容
- 输入串: 当前剩余的输入符号串
- 操作: 执行的动作(移进或归约)
例如,在步骤 1 中,初始状态为 #0,输入串为 (┐a∨a)∧a#,执行的操作为 S6,即根据 SLR 分析表,将状态 6 压入栈中。
通过一步步的识别过程,最终识别成功,说明输入串 #(a∨┐a)∧a# 是根据逻辑表达式 G[S] 定义的合法表达式。
总结:
本文展示了一个使用 SLR 分析表识别逻辑表达式的示例,详细说明了每个步骤的执行过程。SLR 分析表是一种简单而有效的语法分析方法,可以用于识别各种形式的语言表达式。
原文地址: https://www.cveoy.top/t/topic/od2q 著作权归作者所有。请勿转载和采集!