算符优先级语法中算符的 LEADING 和 TRAILING 操作是什么?
LEADING
如果产生式为 A → aα 或 A → Ba α 其中 B 为非终结符,且 α 可以是任意的字符串,则右侧第一个终结符符号为
Leading(A) = {a}
如果产生式为 A → Bα,如果 a 在 LEADING (B) 中,则 a 也将出现在 LEADING (A) 中。
TRAILING
如果产生式为 A→ αa 或 A → αaB 其中 B 为非终结符,且 α 可以是任意的字符串,则
TRAILING (A) = {a}
如果产生式为 A → αB。如果 a 在 TRAILING (B) 中,则 a 也将出现在 TRAILING (A) 中。
计算 LEADING 的算法
输入 − 无上下文语法 G
输出 − 如果布尔数组 L [A, a] = true,则 LEADING (A) = {a}
方法 − 如果 L (A, a) 之前不是真,则过程 Install (A, a) 将使其变为真。
开始
对于每个非终结符 A 和终结符 a
L [A, a] = false ;
- 对于每个形式为 A ⟶ aα 或 A → B a α 的产生式
安装 (A, a);
- 当堆栈不为空时
从堆栈中弹出顶部对 (B, a);
对于每个形式为 A → B α 的产生式
安装 (A, a);
- 结束
过程安装 (A, a)
- 开始
- 如果 L [A, a] 为假
L [A, a] = 真
将 (A, a) 压入堆栈。
- 结束
TRAIL 的计算算法
输入 − 无上下文语法 G
输出 - TRAILING (A) = {a} 当且仅当布尔数组 T [A, a] = 真
方法
- 开始
- 对于每个非终结符 A 和终结符 a
T [A, a] = 假;
- 对于每个形式为 A ⟶ αa 或 A → α a B 的产生式
安装 (A, a);
- 当堆栈不为空时
从堆栈中弹出顶部对 (B, a);
对于每个形式为 A → αB 的产生式
安装 (A, a);
- 结束
过程安装 (A, a)
- 开始
- 如果 T [A, a] 为假
T [A, a] = 真
将 (A, a) 压入堆栈。
- 结束
算子优先级关系计算算法
输入 - 算子语法
输出 - 终结符和符号之间的优先级关系。
方法
- 开始
- 对于每个产生式 A → B1, B2, … … … . Bn
对于 i = 1 到 n – 1
如果 Bi 和 Bi+1 均为终结符,则
设置 Bi = Bi+1
如果 i ≤ n − 2 且 Bi 和 Bi+2 均为终结符且 Bi+1 为非终结符,则
设置 Bi = Bi+1
如果 Bi为终结符 & Bi+1为非终结符,则对于 LEADING (Bi+1) 中的所有 a
设置 Bi <. a
如果 Bi为非终结符 & Bi+1 为终结符,则对于 TRAILING (Bi) 中的所有 a
设置 a . > Bi+1
- 结束
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP