Я не понял, как однозначная грамматика получается из двусмысленной грамматики? Рассмотрим пример на сайте: Пример. Каким образом полученная грамматика меня сбила с толку.
Может ли кто-нибудь направить меня?
Я не понял, как однозначная грамматика получается из двусмысленной грамматики? Рассмотрим пример на сайте: Пример. Каким образом полученная грамматика меня сбила с толку.
Может ли кто-нибудь направить меня?
Пример состоит из двух грамматик:
E → E + E | E ∗ E | (E) | a
E → E + T | T
T → T ∗ F | F
F → (E) | a
Недвусмысленная грамматика была получена из двусмысленной, используя информацию, не указанную в двусмысленной грамматике:
С внешней информацией мы можем сказать, что:
a * a + b * b
сгруппирован, как если бы он был написан:
(a * a) + (b * b)
а не как:
a * ((a + b) * b)
Второе предполагает, что '+' связывается более жестко, чем '*', и что операторы связываются справа налево, а не слева направо.
Как бы ассоциативность появилась на картинке для таких примеров, как:
S → aA | Ba
A → BA | a
B → aB | epsilon
Это двусмысленная грамматика, и как это сделать, чтобы превратить ее в однозначную?
Интересно, "epsilon" - это ε, пустая строка; пусть анализировать грамматику в обоих направлениях.
Правило для B говорит, что B - либо пустая строка, либо a, за которой следует действительный B, что равно бесконечно длинной строке 0 или более a.
Правило для A означает, что A является либо a, либо a B, за которым следует a. Таким образом, бесконечно длинная строка может быть A тоже. Таким образом, для грамматики нет способа выбрать, является ли строка a либо A, либо B.
И правило для S не помогает; S - либо a, за которым следует бесконечно длинная строка a или бесконечно длинная строка a, за которой следует a. Он требует по крайней мере одного a, но любое число a от одного вверх в порядке, но грамматика не имеет оснований для выбора между левой и правой альтернативами.
Итак, эта грамматика по своей сути неоднозначна и не может, по моей оценке, быть однозначной; это, безусловно, нельзя сделать однозначным без другой информации, не имеющейся у нас.
Как насчет того, если ε не является пустой строкой?
В этом случае грамматика недвусмысленная, поскольку она стоит (хотя и не обязательно LR (1)). Ясно, что многое зависит от значения "эпсилон" в комментарии/вопросе.
Я не думаю, что ассоциативность влияет на эту грамматику. Он обычно вступает в игру с инфиксными операторами (такими как "+" в "a + b" ).
Из Википедии (на Распознавание неоднозначных грамматик):
Некоторые двусмысленные грамматики могут быть преобразованы в однозначные грамматики, но общая процедура для этого невозможна, так как не существует алгоритма для обнаружения неоднозначных грамматик.
Чтобы придумать вторую грамматику, вам нужно найти грамматику