什么是移进规约分析器?
移进规约分析器是一种自底向上的分析器。它从叶子节点生成语法树到根节点。在移进规约分析器中,输入字符串将被规约到起始符号。这种规约可以通过反向处理最右推导来产生,即从起始符号到输入字符串。
移进规约分析器需要两种数据结构
- 输入缓冲区
- 栈
移进规约分析的步骤如下:
移进规约分析的步骤如下:
它使用一个栈和一个输入缓冲区。
在栈的底部和输入缓冲区输入字符串的右端插入$。

移进 - 分析器将零个或多个输入符号移入栈,直到句柄位于栈顶。
规约 - 分析器规约或替换栈顶的句柄为产生式的左部,即弹出产生式的右部,并压入左部。
接受 - 重复步骤 3 和步骤 4,直到检测到错误或栈包含起始符号 (S) 且输入缓冲区为空,即包含$。

示例 1 - 对给定字符串和语法执行自底向上分析,即显示以下语法中字符串 abbcde 的规约
S → a A B e
A → A b c | b
B → d

它可以通过在每一步应用最右推导的反向将字符串 abbcde 规约到起始符号 S。
句柄 - 在上述过程中,用左部替换产生式的右部被称为“规约”,每次替换被称为“句柄”。
示例 2 - 考虑以下语法
E → E + E
E → E * E
E → (E)
E → id
执行最右推导字符串 id1 + id2 * id3。在每一步找到句柄。

每一步的句柄
| 右句型 | 句柄 | 使用的产生式 |
|---|---|---|
| id1 + id2 * id3 | id1 | E → id1 |
| E + id2 * id3 | id2 | E → id2 |
| E + E * id3 | id3 | E → id3 |
| E + E * E | E * E | E → E ∗ E |
| E + E | E + E | E → E + E |
| E |
示例 3 - 考虑以下语法
S → CC
C → cC
C → d
使用移进规约分析检查输入字符串“ccdd”是否被接受。

| 栈 | 输入字符串 | 动作 |
|---|---|---|
| $ | ccdd$ | 移进 |
| $ c | cdd$ | 移进 |
| $ cc | dd$ | 移进 |
| $ ccd | d$ | 根据 C → id 规约 |
| $ ccC | d$ | 根据 C → cC 规约 |
| $cC | d$ | 根据 C → cC 规约 |
| $C | d$ | 移进 |
| $Cd | $ | 根据 C → d 规约 |
| $CC | $ | 根据 S → CC 规约 |
| $S | $ | 接受 |
∴ 最后,栈包含起始符号 S,输入缓冲区为空。它将接受该字符串。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP