Algorithm 检查上下文无关语法是否生成DFA拒绝的无限语言的算法

Algorithm 检查上下文无关语法是否生成DFA拒绝的无限语言的算法,algorithm,context-free-grammar,formal-languages,automaton,Algorithm,Context Free Grammar,Formal Languages,Automaton,我有一个DFA和一个CFG,然后我必须检查G是否生成了a不接受(被a拒绝)的无限单词,以及一个很好的复杂度时间 我想用CFG构造一个图,若它包含一个有向循环,那个么就会产生一个无限语言。顶点是变量,我为每个产品绘制一些边。输入都是被DFA拒绝的单词,当我发现一个循环时,我可以说CFG生成了被DFA拒绝的无限语言 我不知道如何在算法中转换它,或者如果我的建议不正确,我必须创建一个新的 编辑:我可以将我的cfg转换成CNF,然后再转换成DFA(使用乔姆斯基)。之后,我尝试找到一个循环。但是我的变换d

我有一个DFA和一个CFG,然后我必须检查G是否生成了a不接受(被a拒绝)的无限单词,以及一个很好的复杂度时间

我想用CFG构造一个图,若它包含一个有向循环,那个么就会产生一个无限语言。顶点是变量,我为每个产品绘制一些边。输入都是被DFA拒绝的单词,当我发现一个循环时,我可以说CFG生成了被DFA拒绝的无限语言

我不知道如何在算法中转换它,或者如果我的建议不正确,我必须创建一个新的


编辑:我可以将我的cfg转换成CNF,然后再转换成DFA(使用乔姆斯基)。之后,我尝试找到一个循环。但是我的变换dfa可以比我的dfa有更少的状态。。。我想我需要如何在我的cfg中得到DFA拒绝的单词。

给定cfg,构造PDA B。给定DFA和PDA B,构造PDA C,使C接受L(C)=L(B)\L(A),其中\设置为差。现在,L(C)正是PDA B(因此由CFG G生成)接受但DFA不接受(即拒绝)的单词语言


现在的问题是B的语言是否是无限的。我们可以做到。一种方法是将PDA转换回CFG,然后将CFG放在CNF中-删除不必要和无效的符号。然后,在非终端符号之间创建依赖关系树。如果任何剩余的(有效的)非终结符符号依赖于自身,即存在循环,则语言是无限的。否则,语言是有限的(如果没有生产符号,则为空)。

最后一个问题。该算法的复杂度时间更小于O(n^2),对吗?@JackFenn问得好;我需要在每个步骤上做一些挖掘,看看整体的复杂性是什么。O(n^2)至少应该是最坏情况下的下限,因为如果原始DFA和PDA具有相同数量的状态,则差异语言的PDA具有如此多的状态。