Насколько я понимаю, ваш вопрос: "Когда двусмысленная грамматика или производственное правило в порядке?"
Сначала рассмотрим язык, который вы описываете. Что может означать допущение неоднозначного правила производства в языке.
Ваш пример описывает язык, который может включать в себя такие выражения, как: t b t b t b t
Выражение, разрешенное, как в вашем втором примере, будет (((( t ) b t) b t ) b t )
, но в неоднозначном грамматике оно также может стать ( t b ( t b ( t b ( t))))
или даже ( t b t ) b ( t b t )
. Что может быть действительным, может зависеть от языка. Если оператор b
моделирует вычитание, это действительно не должно быть неоднозначным, но если бы это было сложение, это могло бы быть хорошо. Это действительно зависит от языка.
Второй вопрос, который необходимо рассмотреть, заключается в том, как будет выглядеть получившийся исходный файл грамматики после разрешения конфликтов. Как и в случае с другим исходным кодом, грамматика предназначена для чтения людьми, а во вторую очередь - компьютерами. Предпочитайте нотацию, которая дает более четкое объяснение того, что парсер пытается сделать из грамматики. То есть, если синтаксический анализатор выполняет какое-то, возможно, неопределенное поведение, например порядок вычисления аргументов функции на нетерпеливом языке, грамматика выглядит неоднозначной.