【问题标题】:What is the productions for language {0^m 1^m 2^n | n>=0, m > n}语言 {0^m 1^m 2^n | 的产生式是什么? n>=0, m > n}
【发布时间】:2017-05-18 02:46:46
【问题描述】:

我想知道如何获得语言 {0^m 1^m 2^n | 的产生式n>=0, m > n}。

这是我所拥有的,我不确定它是否正确。如果我错了,请纠正我:

 S -> 01A | 0B1A | 00B11A
 A -> 2A | 2 | λ
 B -> 01

谢谢。

【问题讨论】:

  • 这显然不正确:它不能产生00001111 (m=4, n=0),但它可以产生0122(违反了m>n 约束)。第一个问题可以通过使 B 可重复来解决,也许是B -> 01 | 0B1(请注意,这会使您对 S 的最终选择变得多余)。我想不出任何方法来强制 m>n 而不升级到更强大的东西,比如上下文相关的语法。

标签: grammar production discrete-mathematics


【解决方案1】:

这种语言不是上下文无关的。这可以使用上下文无关语言的泵引理来显示。你最终有五个案例;其中三个案例仅抽取符号 0、1 或 2 之一;和两个案例泵相邻的符号。请注意,除了我们可以选择字符串 0^(p+1) 1^(p+1) 2^p 之外,您几乎可以做到这一点,即使您跨越 0s 和 1s 并均匀地抽取它们,您仍然无法通过 m>n抽空时测试。

有比上下文无关更强大的语法。我们可以为这种语言生成一个通用语法。

S -> RT
R -> 0R1X | 01

X1 -> 1X

XT -> T2 | T
1T -> e

前两个产生式产生形式为 0^n (01) (1X)^n T 的字符串。

第三个产生式产生形式为 0^n (01) 1^n X^n T 的字符串。它允许 X 在所有 1 之后“浮动”到右侧。

最后两个产生式产生形式为 0^n (01) 1^n 2^m, m

【讨论】:

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