Допустим, у меня есть следующая грамматика:
Expr -> Expr plus Expr (1)
| Expr minus Expr (2)
| num (3)
Когда вы производите самый левый вывод, после "расширения" Expr
как узнать, какую продукцию использовать?
Например, если я захочу разобрать 1 + 2 - 3
я бы начал с:
Expr => Expr minus Expr
, но это произошло бы только потому, что это небольшой пример, и легко увидеть, что (3)
быстро приведет в никуда и (2)
не поместится в следующем шаге.Будет ли пример немного сложнее, и мне придется сделать все в основном методом проб и ошибок.Это «правильный» подход или я что-то упустил?