2010-12-07 11 views
1

次のBNF文法を考慮してください(非終端記号は角カッコで囲み、<identifier>は正当なJava変数識別子と一致します)。 EXPを見つめる次のBNF文法を検討してください

(x - a) * (y + b) 

<exp> ::= <exp> + <term> 
     | <exp> - <term> 
     | <term> 
<term> ::= <term> * <factor> 
     | <term>/<factor> 
     | <factor> 
<factor> ::= (<exp>) 
     | <identifier> 

は、次の式のために導出3をプロデュース

<exp> 

は、用語とEXPを置き換える:

<term> 

は、と言葉を置き換えます。

<term> * <factor> 

因子で用語を置き換える:

<factor> * <factor> 

は(EXP)との両方の要素を置き換える:

(<exp>) * (<exp>) 

をEXPとの最初の経験値を置き換える - EXP +用語

という用語と第二の
(<exp> - <term>) * (<exp> + <term>) 

expの両方をtermに置き換えてrepl 4つの条件すべてを要因とする

(<factor> - <factor>) * (<factor> + <factor>) 

識別子

(<identifier> - <identifier>) * (<identifier> + <identifier>) 

持つすべての要素を置き換え、これは十分でしょうか?

+1

」で始める必要がありますか? –

答えて

6

もう一度進む必要があります。<factor>は非終端記号です.に減らす必要があります。

さらに、<term>から直接開始するのではなく、から開始してから(<term>に減らす必要があります)。

+0

ありがとうございます、私はあなたの提案に基づいて更新します。 –

関連する問題