【问题标题】:Construct CFG from {w element of {a, b}* : 2#a(w)=3#b(w)}从 {a, b}* 的 {w 元素构造 CFG:2#a(w)=3#b(w)}
【发布时间】:2020-03-20 07:01:47
【问题描述】:

如果我有以下语言 { x 是 {a,b}* 的元素,其中 2#a(x)=3#b(x),那么该语言的 cfg 是:

S=>SaSaSaSbSbS |SaSaSbSaSbS|SaSaSbSbSaS | SaSbSaSaSbS| SaSbSaSbSaS | SaSbSbSaS |SbSaSaSaSbS |SbSaSaSbSaS |SbSaSbSaS |SbSbSaSaSaS | ε/λ

这是正确的吗?如果这不正确/还有另一种更简单的形式,你能告诉它吗?除此之外,我对其他形式一无所知。

【问题讨论】:

    标签: grammar context-free-grammar computation-theory


    【解决方案1】:

    乍一看,这可能有效:

    1. 您的基本情况很好;空字符串是语言

    2. 您涵盖了所有归纳案例:您只需添加 2 a 和 3 b 即可涵盖所有安排

    我没有看到比这更简单的解决方案,尽管您可以从所有产生式的右侧删除前导或尾随 S;然后,通过选择一个产品,您将致力于第一个或最后一个终端符号,但我认为这仍然有效。甚至可能同时删除前导和尾随 S,以便您同时承诺第一个和最后一个。任何其他简化似乎都会增加产生式的数量或非终结符的数量,或两者兼而有之,虽然这可能会减少编码语法所需的符号总数,但可以说不会使语法变得更简单(实际上,更多的非终结符和产品通常被视为更复杂,而不是更少)。如果您想尝试添加产生式或非终结符,请考虑例如T => Sa 和 R => Sb,只是为了减少重复。

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2021-04-25
      • 2017-11-07
      • 1970-01-01
      相关资源
      最近更新 更多