这是语法,
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
我认为上面的正则表达式是
0000(0000)*000(000)*
//因为0000和000至少会被发现一次。
这是对的吗?
有人告诉我,这个语法含糊不清。任何人都可以向我解释这个原因吗?答案 0 :(得分:2)
遵循语法(实际上是右线性语法)
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
您可以通过S
或A
从起始变量B
生成字符串,因此语法L(G)的语言是两种语言的联合(+
)可以来自A
和B
。
生产:
A -> 0000A | epsilon
生成(0000)*
。
并且
生产:
B -> 000B | epsilon
生成(000)*
所以L(G)的正则表达式为:(000)*
+
(0000)*
note L(G)可以有空字符串。
答案 1 :(得分:1)
你的推理不正确。反例:空字符串是语言,但你的正则表达式不匹配。
就模棱两可而言,考虑一串12个零。从语法中可以得到多少种不同的方法?