1.2.6
<Arex sN '*' Fact (sN '-' 1)>
Сделать шаг не можем, так как выбор предложения зависит от значения sN, например:
если sN = 2, то применимо предложение с образом eX '*' eY при
eX = 2, eY = Fact (2 '-' 1)
если sN = '+', то применимо предложение с образом eX '+' eY при
eX = пустое выражение, eY = '*' Fact ('+' '-' 1)
Что же делать?
Оказывается, наш язык арифметических выражений содержит достаточно средств для снятия таких неоднозначностей, а именно — скобки. Поставим их вокруг переменной sN, из-за которой возникла неоднозначность:
Fact { 0 = 1; sN = <Arex (sN) '*' Fact((sN) '-' 1)>; }
и снова попытаемся вычислить обращение к Arex в общем виде (см. следующий слайд).