微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将伪左线性上下文无关语法转换为左线性语法

如何解决将伪左线性上下文无关语法转换为左线性语法

所以我遇到了一个小问题。

我已经获得了语法:

G:A-> Ba_1...a_n
A->a_1...a_n

现在我必须把这个“伪”左线性 cf 语法,变成一个左线性 cf 语法。
我的想法是用 x 替换 a_1...a_n,并说 x:=a_1...a_n 和新的语法 G' 现在是:

G': A-> Bx
A->x

现在 cf 语法是一个左线性语法。这个有用吗?
非常感谢任何帮助。

解决方法

您如何定义“左线性语法”?在 Wikipedia 和许多其他地方发现的标准定义是,左线性文法是一种上下文无关文法,其中“所有规则的形式都是 A → αw,其中 α 是为空或单个非终结符,w 是一个终结符串”。 (强调。)

根据该定义,只要 a1…an 不包含非终结符,您的“伪”左线性语法就是左线性的。如果不是这种情况,则语法不是线性的,并且没有算法可以从非线性语法构造线性语法。 (如果有,常规语言将与上下文无关文法相同,这当然不是这种情况。)

如果您(或为您设置任务的人)使用了不同的定义,您应该将其作为问题的一部分提供。

无论如何,将第一个产生式更改为 A → BX 会使语法非线性,因此这似乎不是所需的答案。 (将 X 的名称写为 x 并不能阻止它成为非终结符。非终结符是任何至少有一个产生式的符号,因此 {{ 1}} 产生足以使 x → ... 成为非终结符。)

此外,如果目标是确保所有规则的右侧最多有两个符号(与乔姆斯基范式有点相似),那么您需要对使用的任何规则进行某种递归应用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。