2016-10-22 9 views
1

すべての文をanbn-2の形式で認識するためのBNF文法を記述します。ここでn> 1です。
たとえば、aa、aaab、aaaabbはすべて受け入れられますが、
ですが、abbb、aab、aabbは
(ヒント:再帰を使用しない)です。

これは私の派生物です。
S :: = AZ
Z :: = A | AAB
A :: = a
B :: = b
これは正しいですか?次のBNF文法(BNF、再帰)を考慮してください。

EDIT:これは正しいですか?

S - > a | X | Y
X-> aX | a
Y - > aX | b

答えて

0

どちらも完全に間違っています。

最初の文法:Aはaのみに、Bはbのみに変わるので、AをaとBで置き換えることができます。文法は次のようになります。

S -> aZ 
Z -> a 
Z -> aab 

したがって、Sはaaまたはaaabのいずれかになりますが、たとえばaaaabbにはなりません。

第2の文法:最初のルールを使用し、Sをaにします。 aは有効な単語ではないので、文法も間違っています。 (あるいは、SをXに、XをXに9回、Xをaに、aaaaaaaaaaにすることもできます)。

0

あなたの最初の文法は唯一の生成:

S -> AZ -> aZ -> aa 
S -> AZ -> aZ -> aAAB -> aaab 

あなたの第二の文法は言語の一部ではないだけa年代を含む単語を、ことができます。例えば:

S -> a 

私は単純に2 a年代で始まり、その後、任意のペアを生成したいです。したがって、文法は(BNF syntax)のように見える:

<term> ::= "aa" | "aa" <pair> 
<pair> ::= "ab" | "a" <pair> "b" 

例:

<term> -> "aa" 
<term> -> "aa" <pair> -> "aaab" 
<term> -> "aa" <pair> -> "aaa" <pair> "b" -> "aaaabb" 
... 
関連する問題