【问题标题】:Automata theory : Conversion of a Context free grammar to a DFA自动机理论:上下文无关文法到 DFA 的转换
【发布时间】:2014-05-09 14:19:05
【问题描述】:

如何将上下文无关语法转换为 DFA?如果我们有类似的转换,这很容易 A->a B. 但是当我们有 A->a B c 的转换时。那我们应该如何将其表示为 DFA

【问题讨论】:

  • 你不能总是将 CFG 转换为 DFA,但是如果它是左线性或右线性,那么你可以。在这种情况下,这个答案可能会有所帮助Left-Linear and Right-Linear Grammars
  • 所以对于 A->a B c 我们不能构造一个 dfa??
  • 查看正确的方法,它首先将语法转换为左行或右行,然后绘制 DFA。如果无法将 CFG 转换为左线性(右线性),那么实际上语法会生成 CFL,它是常规语言的超集,并且 CFL 的 DFA 是不可能的。 A -> a B c 只有一个生产规则(不是语法),所以你的问题没有意义

标签: finite-automata dfa


【解决方案1】:

首先,您应该将您的语言转换为CNF (Chomskey Normal Form)。 那么转换的步骤是这样的:

  1. 将其转换为左/右文法称为正则文法。

  2. Convert the Regular Grammar into Finite Automata 自动机的转换如下获得 对于每个产生式 A -> aB 使 δ(A, a) = B 即 make an 从 A 到 B 标记为“a”。 对于每个产生式 A -> a 使 δ(A, a) = 最终状态。 对于每个产生式 A -> ϵ,使 δ(A, ϵ) = A 并且 A 将是最终状态。

【讨论】:

  • 此过程并不总是有效 - 它可能会失败,因为 CFG 用于非正则语言,或者因为转换为 CNF 会产生非左线性或非右线性语法。跨度>
【解决方案2】:

没有将任意 CFG 转换为 DFA 的通用过程。例如,考虑这个 CFG:

S → aSb | ε

此语法适用于语言 { anbn | n ≥ 0 },这是一种规范的非常规语言。由于我们只能为常规语言构建 DFA,因此无法使用与此 CFG 相同的语言构建 DFA

【讨论】:

    【解决方案3】:
    • 没有。对于这些语法,无法形成 DFA。
    • 为什么?
    • 因为它需要内存。 a发生的记忆。
    • 是的。它是 CFL(上下文无关语言)。
    • 我们可以设计一个PDA(下推自动机)。在这里,内存(堆栈是 采用 )。对于 PUSH a 和 POP b

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 2019-08-10
      • 2012-06-19
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多