LR解析器在树邻接文法及多上下文无关文法中的应用
1. LR解析器在树邻接文法(TAG)中的应用
1.1 LR自动机状态定义
在TAG的LR解析中,需要定义LR自动机的状态集合。通过两个goto函数(goto和goto⊥)来构建状态集合。具体步骤如下:
1. 从初始状态的闭包开始,closure(qin) 属于状态集合Q。
2. 对于所有q属于Q和每个节点M,如果q′ = closure(goto(q, M)) 不为空,则q′ 属于Q。
3. 对于所有q属于Q和每个节点M,如果q′ = closure(goto⊥(q, M)) 不为空,则q′ 属于Q。
这里需要注意的是,不同定义方式下状态的构成有所不同,但由于goto函数都是基于状态的闭包计算的,所以本质上是等价的。
解析成功的条件是完成对根符号为S的初始树的识别。当状态中包含根标签为S的初始树的完成项时,该状态就是可能的最终状态,最终状态集合Qfin定义为:
Qfin = {q ∈Q|q ∩{[t, ⊤→Rt•]|t ∈I, l(t, ε) = S} ̸= ∅}
例如,图5.21展示了TAG的LR自动机的状态及对应goto函数的转换。如果新状态q′ 是goto(q, M) 的值,则从q到q′ 有一个标记为M的转换;如果新状态q′ 是goto⊥(q, M) 的值,则从q到q′ 有一个标记为⊥(M) 的转换。
1.2 识别器相关定义
为了定义识别器,需要引入约简(reductions)的概念。对于给定状态q,约简的定义如下:如果状态q包含一个完成项,那么其点号产生式的左侧节点,或者如果是辅助树中的⊤,则整个树
超级会员免费看
订阅专栏 解锁全文
8

被折叠的 条评论
为什么被折叠?



