Одинарный и двоичный минус в дереве разбора

Я создаю дерево разбора, которое будет содержать выражения, похожие на

3 - 4 * 8

или же

8 * -5

или же

-(10 * 1)

Мне нужен способ различать одинарный и двоичный минус. То, как сейчас работает моя грамматика, сначала достигается двоичный минус, но я подумываю изменить его и добавить переменную-флаг, которая содержит последнюю переменную.

Пример: если это 5 - 6

Флаг держит 5, и если он видит минус и флаг является числом, пропустите унарный код и переходите к двоичному.

Однако я не уверен, как именно это реализовать в C++

Любая помощь будет принята с благодарностью.

Спасибо

1 ответ

Решение

Самый простой способ реализовать парсер - это метод рекурсивного спуска. Убедитесь, что двоичный минус имеет более высокий приоритет, чем унарный минус, как на указанном сайте:

 E -->  | E "+" E
        | E "-" E
        | "-" E
        | E "*" E
        | E "/" E
        | E "^" E
        | "(" E ")"
        | v
Другие вопросы по тегам