上下文无关语法-如何查找由CFG生成的语言



如果给出了上下文无关语法,是否有一种系统的方法来找出生成的语言,并使用描述性而不是解析性的方法将其表示为一个集合,如L(G)={0^n.1^n|n?=1}(而不是L(G)={01,0011,000111,…})?

我实际上问,因为如果CFG是给定的,有一个问题,如:"找到语法的语言。证明/证明你的答案。",那么一个人如何证明/证明他/她的答案不是这样的?

一般来说,没有。例如,对于任意上下文无关的语法,语言是否等同于Sigma*的问题是无法确定的——这是最简单的对CFL的描述。另一个无法确定的问题是是否两个与上下文无关的语法A和B定义了同一种语言,这不是好兆头对于更一般的问题,即语法和其他替代表示是否定义同一种语言。

在特定情况下,这些问题可能是可决定的——对于形式语言理论的学生来说是幸运的!但是根据上面的可决定性结果,你不会发现一个简单的算法,让你从语法,到一个简洁的描述,通常出现在语言理论教科书。这更像是一个试错的过程您使用一些直觉来想出一个候选描述,然后应用更正式的方法,如构建解析树,或使用闭包属性或抽运引理,来证明或证伪等价。

最新更新