Мне дали домашнее задание преобразовать следующую грамматику в недвусмысленную.
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
не может быть сделано. Как мне преобразовать эту грамматику в однозначную?