特定语言的上下文相关语法



如何构建生成该语言的语法?构造一个生成 L 的语法:

L = {a^n b^m c^k|k>n, k>m}

我相信我的作品应该遵循以下思路:

S-> ABCC
A-> a|aBC|BC
B-> b|bBC
C-> c|Cc
CB->BC

这个想法是从 2 c 开始,并始终保留一个 c,然后使用 C->c|Cc ad 尽可能多的 c。我的 C 生产如何记住 m 和 n 的数字。

一个选项如下:生成一个字符串,每次生成c时,您要么

  • 不要生成其他任何东西,
  • 生成一个a与之配对,
  • 生成要与之配对的b,或
  • 生成一个a和一个与之配对的b

这从这里开始:

S → X

X → c |MXc |Xc

M → A |乙 |血型

公元前→

Ab → ab

BA → AB

(请注意,这是部分不完整的)。在这里,X 扩展到字符串一侧的一系列 c,这些在字符串的另一侧与 A s 和 B s 配对。AB 的产品在那里,以确保它们在扩展之前被重新排序为正确的顺序。

这没有考虑的一种情况是,如果你有一个形式为ncn+k 的字符串会发生什么,但可以按如下方式修复:

S → X |Y

X → c |MXc |Xc

M → A |乙 |血型

公元前→

Ab → ab

BA → AB

Y → aYc |Yc |C

希望这有帮助!

最新更新