GOLD парсер создатель и терминалы

Я пытаюсь создать грамматику для языка сценариев, используя конструктор синтаксического анализатора GOLD, так как я хочу вывод в C#. Однако парсер явно хочет, чтобы терминалы были уникальными. Однако значение терминала может быть контекстно-зависимым?! Рассмотрим символ "-". И то и другое -x а также x-y допустимы, и можно написать грамматику следующим образом:

! -------------------------------------------------
! Terminals
! -------------------------------------------------
Opers = [+-*/]

! -------------------------------------------------
! Rules
! -------------------------------------------------

<Expression> ::= <Expression> <Operator> <Expression>
               | '-' <Expression>
               | <Value>
<Operator>   ::= Opers

Однако теперь символ '-' определяется дважды, один раз косвенно (!) Определенным символом во 2-м производственном правиле <Expression> и один раз как терминал (определенный Оперсом).

Кроме того, строка может содержать также символ -, добавляя третье определение "-"!? Как вы обходите это? Я не видел никакой информации об этом в документации GOLD или где-либо в Интернете. Я думаю, что есть какой-то основной способ работы со сборщиками Parser, которого я не знаю.

Если это проблема, которую невозможно решить с помощью анализатора на основе таблиц, какие у меня есть альтернативы, так как я хочу вывод C#?

1 ответ

Ошибка в том, что -< EXPRESSION> находится в конфликте с оператором, поставьте минус в значение примерно так:

< value> ::= int|'-'< value>
Другие вопросы по тегам