1

次の BNF 文法を考えてみましょう (非終端記号は山かっこで囲まれ、<identifier>有効な Java 変数識別子に一致します)。

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

次の式の導出 3 を生成します。

(x - a) * (y + b)

exp で見つめる:

<exp>

exp を項に置き換えます。

<term>

用語を次のように置き換えます。

<term> * <factor>

項を係数に置き換えます:

<factor> * <factor>

両方の要素を (exp) に置き換えます。

( <exp> ) * ( <exp> )

最初の exp を exp - term に置き換え、2 番目を exp + term に置き換えます

( <exp> - <term> ) * ( <exp> + <term> )

両方の exp を項に置き換えてから、4 つの項すべてを因子に置き換えます。

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

すべての要素を識別子に置き換えます

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

これで十分ですか?

4

1 に答える 1

6

さらに一歩進む必要があります -<factor>は非終端記号であり、 まで減らす必要があります<identifier>

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

于 2010-12-07T23:25:48.370 に答える