Поскольку все, что есть в C ++ и более поздних версиях, имеет хорошие конструкции, которые обрабатывают поведение, подобное «стеку» (векторы, списки, списки массивов и т. Д.), Я хочу оставить вопрос в терминах C.
Итак, я изучаю компиляторы, стеки, inscript и postscript, парсеры, лексеры и все остальное, что включает в себя сборку компилятора, как мне потребуется позже в моем курсе для этого семестра. Я хочу убедиться, что мое понимание стеков является твердым.
Я полагаю, что у меня есть общее представление о том, как собрать человека. В основном у вас есть массив, следующий за моделью LIFO. Когда вы добавляете элемент, он «вставляется» в конец массива и «удаляется» при удалении. Нет проблем там. Моя забота связана с некоторыми деталями реализации. Как отслеживаются такие элементы, как количество элементов? Насколько большим должен быть инициализирован стек? Должен ли я использовать структуру, чтобы объединить эти детали? Являются ли переменные глобальными?
Мой профессор уже передал нам некоторый исходный код в связи с нашим заданием, Я просто ищу некоторые дополнительные детали для моего собственного понимания (как правило, я сам должен что-то собрать, прежде чем понять чужой код). В большей части моего опыта программирования стек был неким волшебным местом, которое было вне моего контроля, но взорвалось бы, если бы мои рекурсивные функции стали слишком глубокими (ТАК кто-нибудь?).
Заранее спасибо.
EDIT:
Хорошо, одну вещь, которую я должен уточнить, это то, что я не делаю "истинный" стек, но мне потребуется взять инфиксное выражение и преобразовать его в постфиксный. Я смотрю на структуру данных стека , поэтому все, что связано с архитектурой, может не применяться в этой области. У меня сложилось впечатление, что стек - это способ справиться с этим, аналогично сокращению правил, описанному в нотации BNF.