次の 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> )
これで十分ですか?