这是语法,
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
我认为上面的正则表达式是
0000(0000)*000(000)*
//因为 0000 和 000 至少会被发现一次。
这是对的吗?
有人说我,这个语法是模棱两可的。谁能向我解释为什么?
在遵循语法(这实际上是右行语法(
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
您可以通过A
或B
从起始变量S
生成字符串,因此语法L(G(的语言是两种语言的联合(+
(可以从A
和B
生成。
生产:
A -> 0000A | epsilon
生成(0000)*
.
和
生产:
B -> 000B | epsilon
生成(000)*
所以 L(G( 的正则表达式是:(000)*
+
(0000)*
注意 L(G( 可以有空字符串。
你的推理不正确。 反例:空字符串在语言中,但您的正则表达式不匹配。
就歧义而言,请考虑一个由 12 个零组成的字符串。 从该语法中可以得出多少种不同的方法?