【问题标题】:What's the Context-Free grammar of this language :L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 }这种语言的上下文无关语法是什么:L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 }
【发布时间】:2021-09-06 11:41:22
【问题描述】:

我试图找到
L= {a^n b^m c^p d^q / m+n=p+q where n,m,p,q >=0 } 的上下文无关语法,但我卡住了。 这是我到目前为止所做的:

S -> X S Y | epsilon
X -> a|b
Y -> c|d

但我发现它不遵守顺序,例如bacd 被接受但不应该:

X S Y -> XX S YY -> ba S cd -> bacd

【问题讨论】:

标签: context-free-grammar context-free-language


【解决方案1】:

S -> aSd 把 A 和 d 放在两边。

S -> X | Y - X 产生更多的 A,Y 产生更多的 d

X -> aXc - A 比 d 多

Y -> bYd - d 比 a 多

X -> Z. - Z 添加 b 和 c

Y -> Z - Z 添加 b 和 c

Z -> bZc Z 添加 b 和 c

Z -> eps Z 终于消失了。

【讨论】:

  • 谢谢你的回答:)
【解决方案2】:

我们可以使用以下“技巧”“强制”订单:

  S -> aSd |  X | Y
  X -> bXd | Z
  Y -> aYc | Z
  Z -> bZc | epsilon

基本上,我们允许S 仅派生ad(完全派生词的“外部”部分)。然后,我们允许S 派生XY,它们中的每一个都代表一个变化:我们开始编写b,而不是a,或者开始使用c d's(这是完全派生词的第二个最里面的部分),最后 Z 只允许 b's 和 c's(这是完全派生词的最里面的部分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2021-08-31
    • 2018-10-21
    • 2021-12-11
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多