2016-12-13 153 views

回答

1

只有常规语言才能转换为DFA,并非所有CFG都代表常规语言,包括问题中的常规语言。

所以答案是“否”。

的NFA并不比DFA的更富有表现力,因此,如果您更换DFA与NFA

一个CFG代表一个普通的语言,如果是左手或线性上述说法仍然是正确的。但仅仅一个CFG不是左线或右线的事实证明什么都没有。例如,S→a | a S a碰巧生成与S→a | S a a相同的语言。

+0

http://hackingoff.com/images/basic-bottom-up-parser/2016-12-13_18-37-59_-0800-dfa.svg刚刚遇到这个,现在有点困惑于LR的DFA( 0)解析器。 LR(0)语法分析器的DFA是否为上下文无关语法的转换?或者它只是帮助构建LR(0)解析器(有多个完成状态)? – ssssay

+0

@ssssay:虽然该页面将其图形描述为DFA,但驱动LR语法分析器的实际上是PDA(下推自动机),它不是F(有限)。没有显示推送转换,“接受”状态实际上是弹出转换(由于它们依赖于该点的堆栈内容,因此不能绘制图表)。很容易看出情况是这样的;您只需尝试使用该机器实际处理输入。 (并且,并非所有的CFG都是LR(0)甚至LR(k))。 – rici