Одинарный и двоичный минус в дереве разбора
Я создаю дерево разбора, которое будет содержать выражения, похожие на
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