【发布时间】:2011-04-06 00:05:04
【问题描述】:
如果给出了上下文无关语法,是否有系统的方法来找出生成的语言并使用描述性而不是分析的方式将其表达为一个集合,例如 L(G)= {0^n.1^n|n?=1}(而不是 L(G)={01,0011,000111,...})?
我之所以问,是因为如果给出了 CFG,并且有这样的问题:“找到语法的语言。证明/证明你的答案。” ,那么其他人如何证明/证明他/她的答案?
【问题讨论】:
如果给出了上下文无关语法,是否有系统的方法来找出生成的语言并使用描述性而不是分析的方式将其表达为一个集合,例如 L(G)= {0^n.1^n|n?=1}(而不是 L(G)={01,0011,000111,...})?
我之所以问,是因为如果给出了 CFG,并且有这样的问题:“找到语法的语言。证明/证明你的答案。” ,那么其他人如何证明/证明他/她的答案?
【问题讨论】:
一般来说,不会。例如,对于任意上下文无关文法,该语言是否等同于 Sigma* 的问题是无法确定的——这是最简单的 可以想象的 CFL 的描述。另一个悬而未决的问题是 两个上下文无关文法 A 和 B 定义了相同的语言,这不是好兆头 对于语法和其他替代表示是否定义相同语言的更一般的问题。
在特定情况下,此类问题可能是可以确定的——幸运的是,对于形式语言理论的学生来说!但是鉴于上述可判定性结果,您不会找到 一个简单的算法,可以让你从语法到语言理论教科书中通常出现的那种简洁描述。这更像是一个反复试验的过程,其中 您使用一些直觉来思考候选描述,然后应用更正式的方法,例如构建解析树,或使用闭包属性或抽取引理,来证明或反驳等价性。
【讨论】: