Мне дали задание на домашнюю работу, чтобы преобразовать следующую грамматику в однозначную.
A --> B
A --> ε
B --> B @ B
B --> STRING
B --> DOUBLE(STRING)
, где A и B нетерминальные, а STRING и DOUBLE нетерминальные.
Я могу вывести, что это неоднозначно, учитывая, что для такой строки можно построить два разных дерева разбора, например:
STRING @ STRING @ DOUBLE(STRING)
.
Пока что у меня есть:
A --> B | ε
B --> B @ DOUBLE(STRING)
B --> C
C --> C @ STRING | STRING | DOUBLE(STRING)
, но оно не завершено в виде строки, такой как:
STRING @ DOUBLE (STRING) @ STRING
не может быть сделано.Как бы я преобразовал эту грамматику в однозначную?