1

ここに文法があります。

S -> A | B

A -> 0000A | epsilon

B -> 000B | epsilon

上記の正規表現は

0000(0000)*000(000)* // 0000 と 000 は少なくとも 1 回検出されるためです。

これは正しいです ?

何人かの人々は私に、この文法は曖昧だと言いました。誰も私にこれを説明できますか?

4

2 に答える 2

2

次の文法(実際には右ライナー文法

S -> A | B

A -> 0000A | epsilon

B -> 000B | epsilon 

を介して、またはSを介して開始変数から文字列を生成できます。文法L(G)の言語はUnion( )であり、2つの言語のUnion()はとから生成できます。 AB+AB

製造:

A -> 0000A | epsilon    

を生成し (0000)*ます。

製造:

B -> 000B | epsilon     

生成します (000)*

したがって、L(G)の正規表現は次のとおりです。 (000)* + (0000)*

L(G)はnull文字列を持つことができることに注意してください。

于 2013-02-09T09:14:04.503 に答える
1

あなたの推論は正しくありません。反例:空の文字列はその言語にありますが、正規表現はそれに一致しません。

あいまいさに関しては、12個のゼロの文字列を検討してください。その文法からそれを導き出すことができる方法はいくつありますか?

于 2013-02-09T01:21:35.303 に答える