如何查找CFG生成的语言

时间:2011-04-06 00:05:05

标签: context-free-grammar

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

我实际上是在问,因为如果给出了一个CFG并且有一个问题:“找到语法的语言。证明/证明你的答案。”那么有人能怎样证明/证明他/她的答案呢?

1 个答案:

答案 0 :(得分:3)

一般来说,没有。例如,对于任意上下文无关语法,语言是否等同于Sigma *的问题是不可判定的 - 这是关于最简单的 可以想象的CFL的描述。另一个不可判定的问题是,是否 两个上下文无关语法A和B定义相同的语言,这不是好兆头 关于语法和其他替代演示文稿是否定义相同语言的更一般性问题。

在特定情况下,这些问题可能是可以判定的 - 幸运的是正式语言理论学生!但鉴于上述可判定性结果,你不会发现 一种简单的算法,可以让您从语法中获得通常在语言理论教科书中提供的简明描述。这更像是一个试错过程,在哪里 你使用一些直觉来思考一个候选描述,然后应用更正式的方法,如构建解析树,或使用闭包属性或抽取引理,来证明或反驳等价。