Понимание абсолютных значений при синтаксическом анализе выражений в двоичном дереве?

Я пишу парсер для выражений, которые включают токены ),(,|,*,+,-,/, переменные и константы.

Пока что мой код работает с *,/,-,+,(,), но я не знаю, как работать с абсолютными значениями.

Со скобками я начинаю с ( и заканчиваю на ), что очень просто, но как мне определить, какой "|" открытие, а что закрытие?

Для разбора я использую два стека и алгоритм маневровой станции (по крайней мере, так, как я его понял и написал).


person Simon    schedule 18.05.2014    source источник
comment
используйте escape-символ `\` для этих значений.   -  person Braj    schedule 18.05.2014
comment
@Braj Я не думаю, что у ОП есть проблемы с использованием | в его исходном коде, но для разбора выражений, содержащих | так как этот символ неоднозначен (один и тот же символ открывает и закрывает выражения).   -  person Zoyd    schedule 18.05.2014
comment
То, что говорит @Zoyd, верно. Я не могу изменить математическое выражение в соответствии со своими потребностями. | неоднозначно, и мне нужно знать, что открывается, а что закрывается.   -  person Simon    schedule 18.05.2014


Ответы (1)


Нужен какой-то контекст. Если предыдущий символ ничего или один из *,/,-,+,(, | открывается; в противном случае он закрывается.

person Zoyd    schedule 18.05.2014
comment
Спасибо, это как раз то, что мне нужно было знать. Поэтому я просто проверю, является ли это одним из этих токенов или это первый токен, который он открывает. Большое спасибо. - person Simon; 18.05.2014