【问题标题】:Transform a pseudo left-linear context free Grammer into a left-linear Grammar将伪左线性上下文无关文法转换为左线性文法
【发布时间】:2021-09-04 16:25:08
【问题描述】:

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

我得到了语法:

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 语法是左线性语法。这行得通吗?
非常感谢任何帮助。

【问题讨论】:

  • 请注意,在 Computer Science 上询问有关 formal-languages 的问题会更方便,您和您的响应者可以使用 MathJax 进行格式化,而不是使用有限的 HTML 子集或者让读者去想象 LaTeX 的应用。大多数形式语言问题与编程无关,因此不在 SO 的范围内。

标签: context-free-grammar automata finite-automata formal-languages formal-methods


【解决方案1】:

您如何定义“左线性语法”?在Wikipedia 和许多其他地方发现的标准定义是左线性文法是一种上下文无关文法,其中“所有规则都采用A → αw 的形式,其中α 要么是空的,要么是单个非终结符w 是一个终端字符串”。 (已添加重点。)

有了这个定义,只要a<sub>1</sub>…a<sub>n</sub> 不包含非终结符,你的“伪”左线性语法就是左线性的。如果不是这种情况,则语法不是线性的,并且没有算法可以从非线性语法构造线性语法。 (如果有,常规语言将与上下文无关文法相同,当然不是这样。)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多