Рассмотрим следующую грамматику BNF (где нетерминалы заключены в угловые скобки и <identifier>
соответствует любому допустимому идентификатору переменной Java).
<exp> ::= <exp> + <term>
| <exp> - <term>
| <term>
<term> ::= <term> * <factor>
| <term> / <factor>
| <factor>
<factor> ::= ( <exp> )
| <identifier>
Создайте три деривации для следующего выражения:
(x - a) * (y + b)
Начиная с exp:
<exp>
заменить exp на термин:
<term>
заменить термин на:
<term> * <factor>
заменитьтермин с фактором:
<factor> * <factor>
замените оба фактора на (exp):
( <exp> ) * ( <exp> )
замените первый exp на exp - term, а второй на exp + term
( <exp> - <term> ) * ( <exp> + <term> )
заменить оба выражения на срок, а затем заменить все 4 условия на факторы.
( <factor> - <factor> ) * ( <factor> + <factor> )
заменить все факторы на идентификаторы
( <identifier> - <identifier> ) * ( <identifier> + <identifier> )
Достаточно ли этого?