如何构建生成该语言的语法?构造一个生成 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 配对。A
和 B
的产品在那里,以确保它们在扩展之前被重新排序为正确的顺序。
这没有考虑的一种情况是,如果你有一个形式为ncn+k 的字符串会发生什么,但可以按如下方式修复:
S → X |Y
X → c |MXc |Xc
M → A |乙 |血型
公元前→
Ab → ab
BA → AB
Y → aYc |Yc |C
希望这有帮助!