上下文无关语法 - CFG 到正则表达式



这是语法,

S -> A | B

A -> 0000A | epsilon

B -> 000B | epsilon

我认为上面的正则表达式是

0000(0000)*000(000)*//因为 0000 和 000 至少会被发现一次。

这是对的吗?

有人说我,这个语法是模棱两可的。谁能向我解释为什么?

在遵循语法(这实际上是右行语法(

S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon 

您可以通过AB从起始变量S生成字符串,因此语法L(G(的语言是两种语言的联合(+(可以从AB生成。

生产:

A -> 0000A | epsilon    

生成(0000)* .

生产:

B -> 000B | epsilon     

生成(000)*

所以 L(G( 的正则表达式是:(000)* + (0000)*

注意 L(G( 可以有空字符串。

你的推理不正确。 反例:空字符串在语言中,但您的正则表达式不匹配。

就歧义而言,请考虑一个由 12 个零组成的字符串。 从该语法中可以得出多少种不同的方法?

最新更新