ここに文法があります。
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
上記の正規表現は
0000(0000)*000(000)*
// 0000 と 000 は少なくとも 1 回検出されるためです。
これは正しいです ?
何人かの人々は私に、この文法は曖昧だと言いました。誰も私にこれを説明できますか?
ここに文法があります。
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
上記の正規表現は
0000(0000)*000(000)*
// 0000 と 000 は少なくとも 1 回検出されるためです。
これは正しいです ?
何人かの人々は私に、この文法は曖昧だと言いました。誰も私にこれを説明できますか?
次の文法(実際には右ライナー文法)
S -> A | B
A -> 0000A | epsilon
B -> 000B | epsilon
を介して、またはS
を介して開始変数から文字列を生成できます。文法L(G)の言語はUnion( )であり、2つの言語のUnion()はとから生成できます。 A
B
+
A
B
製造:
A -> 0000A | epsilon
を生成し (0000)*
ます。
と
製造:
B -> 000B | epsilon
生成します (000)*
したがって、L(G)の正規表現は次のとおりです。 (000)*
+
(0000)*
L(G)はnull文字列を持つことができることに注意してください。
あなたの推論は正しくありません。反例:空の文字列はその言語にありますが、正規表現はそれに一致しません。
あいまいさに関しては、12個のゼロの文字列を検討してください。その文法からそれを導き出すことができる方法はいくつありますか?