【问题标题】:Can all context free grammars be converted to NFA/DFA?所有上下文无关语法都可以转换为 NFA/DFA 吗?
【发布时间】:2017-04-28 22:42:55
【问题描述】:

我看过这篇关于如何将上下文无关语法转换为 DFA 的帖子: Automata theory : Conversion of a Context free grammar to a DFA

但是,只是想知道所有上下文无关语法都可以转换为 DFA/NFA 吗?不能用正则表达式表达的上下文无关文法怎么办?前任。 S->(S) | ()

谢谢!

【问题讨论】:

    标签: parsing context-free-grammar dfa nfa


    【解决方案1】:

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

    所以答案是“不”。

    NFA 并不比 DFA 更具表现力,因此如果您将 DFA 替换为 NFA,上述陈述仍然正确

    如果 CFG 是右线性或左线性,则它表示常规语言。但是,CFG 不是左线性或右线性这一事实并不能证明任何事情。例如,S→a | a S a 恰好生成与S→a | S a a 相同的语言。

    【讨论】:

    • hackingoff.com/images/basic-bottom-up-parser/… 刚刚遇到这个,现在对 LR(0) 解析器的 DFA 有点困惑。 LR(0) 解析器的 DFA 是上下文无关语法的转换吗?或者它只是帮助构建 LR(0) 解析器(有多个完成状态)?
    • @ssssay:尽管该页面将其图形描述为 DFA,但驱动 LR 解析器的实际上是 PDA(下推自动机),而不是 F(有限)。未显示推送转换,“接受”状态实际上是弹出转换(无法绘制图表,因为它们取决于当时堆栈的内容)。很容易看出情况就是这样。您只需要尝试使用该机器实际处理输入。 (而且,并非所有 CFG 都是 LR(0) 甚至 LR(k)。)
    猜你喜欢
    • 2011-08-16
    • 2013-01-28
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2011-04-29
    • 2018-09-03
    • 2011-12-07
    相关资源
    最近更新 更多