基于精炼的程序输入语法学习算法解析
语法精炼过程
在长度为 4 的情况下,语法 G′ 会生成一些特定的单词,具体如下:
- G′ 生成的单词有:+ + ∗∗、+ + ∗+、∗+ ∗∗ 和 ∗+ ∗+,对应的解析树如图 1 所示。
- 由于 + +∗+、∗+∗+、∗+∗∗ 不属于有效输入(validInputs(p)),且 l = 1,因此删除候选集(deleteCandidates)取值为 {S →N+A2, S →N∗A1, S →N∗A2}。
- 因为 + + ∗∗ 属于有效输入,所以将 S →N+A1 添加到安全产生式(safeProductions)中。
- 经过上述操作,精炼产生式(refinedProductions)的内容进一步缩减为(注意 A2 →SN+ 不再可达,因此也被消除):
S →N+N∗ | N+A1
A1 →SN∗
N+ →+
N∗ →∗
在长度为 5 的情况下,l 的值设为 2,但由于上一步得到的语法无法生成长度为 5 的单词,所以其他方面没有变化。最终,当长度为 5 时,该语法生成的所有单词都属于有效输入,且因为 l = 2,规则 A1 →SN∗ 被添加到安全产生式中。此时,精炼产生式中的所有产生式都属于安全产生式,满足终止条件。
运行时间分析
由于 G′ 是乔姆斯基范式(Chomsky normal form),其每个解析树都是二叉树。因此,算法 1 中第 12 - 41 行的主 while 循环最多会重复 p = 2m 次,其中 m = |N ′| 是初始 G′ 中非终结符的数量
基于精炼的语法学习算法解析
超级会员免费看
订阅专栏 解锁全文
1万+

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



