Проблемы со стеком в преобразователе инфикса в постфикс

Добрый день! Я реализую преобразователь инфикса в постфикс, используя стеки. Это работает, когда пользователь вводит инфиксное выражение без скобок; но когда присутствует круглая скобка, консоль говорит:

Exception in thread "main" StackEmptyException: Stack is empty.
    at ArrayStack.top(ArrayStack.java:85)
    at InfixToPostfix.convert(InfixToPostfix.java:54)
    at InfixToPostfix.main(InfixToPostfix.java:85)


Моя проблема заключается в реализации ранга (верхней части стека).


person Gyneth Ashtoreth    schedule 14.07.2013    source источник


Ответы (1)


Ага! Вам нужен «заглянуть в стек» при сравнении ранга самого верхнего ... потому что «верхний» должен выталкивать элемент.

Попробуйте stack.peek() или аналогичный. Какой класс и библиотеку вы используете для стека? s[top] недопустимый синтаксис.

Вернувшись к ответу № 1, я начал писать для вас функцию peekRank(), думая, что возникла проблема с проверкой, когда стек пуст... но остановился, когда увидел, что у вас есть пустая проверка.

Однако, похоже, вы неправильно заглядывали в верхнюю часть.


[Ранее № 2 — не проблема]

Вы рассматривали ) обработку? В вашем коде ( похоже, есть защита от пустого стека.

[Ранее # 1 - не совсем проблема]

Поместите псевдотокен 'ENTIRE EXPRESSION' в стек на все время обработки, чтобы у вас был непустой стек, или ответьте на ранг, несмотря на отсутствие окружающего выражения/окружающего токена.

person Thomas W    schedule 14.07.2013
comment
Я думаю, что правильно нажал ( и ), и это работает, даже если нет закрывающих скобок. У меня возникли трудности с реализацией вершины стека. (Программа предполагает, что пользователь правильно ввел выражение, т. е. соответствующие знаки включения). - person Gyneth Ashtoreth; 14.07.2013