Это родная архитектура всех языков программирования высокого уровня. В курсе теории автоматов обсуждался вопрос о том, что разрешимыми являются 3 типа языков: контекстные, контекстно-свободные и регулярные. Языки произвольные или типа 0 не разрешимы. Не зная наперед какую-то конкретную грамматику языка, вы никогда не сможете определить принадлежность строки языку.
Контекстно-свободные языки могут быть относительно эффективно распознаны магазинными автоматами. Но помимо того, что магазинный автомат необходим для распознавания, код, который порождается такого рода автоматом, тоже очень легко может быть исполнен на магазинном (стековом) автомате. Поэтому есть целый класс архитектур, которые близки к языкам высокого уровня тем, что они являются стековыми.
Чтобы пояснить, что такое стековая архитектура рассмотрим арифметическое выражение: .
Синтаксический анализатор или дерево грамматического разбора, которое потом преобразуется в семантическое дерево, определяет порядок выполнения операций для стековой вычислительной машины (для магазинного автомата).
Построим семантическое дерево для данного выражения (оно задает порядок интерпретации тех терминальных знаков, которые встречаются в этой строке).
Рис. 5.4. Семантическое дерево
Для стековой архитектуры код может выглядеть следующим образом:
push b
not
push c
mul
push d
sub
push d
swap
div
Примеры стековых вычислительных устройств:
1. Математический сопроцессор i80x87;
2. FORTH-процессоры, JAVA-процессоры (специализированные процессоры, являющиеся в чистом виде конечными автоматами);
3. Стековая вычислительная система Эльбрус.
Достоинства стековой архитектуры
1. Высокое быстродействие. Оно определяется тем что код команд выполнен очень компактно и данные всегда находятся в регистровой памяти.
2. Уменьшение загрузки системного интерфейса процессора.
3. Языки программирования по своей внутренней структуре ориентированы на стековую архитектуру, что уменьшает сложность компилятора.
Что касается компактности кода: более компактного кода, чем код порождаемый стековой архитектурой ни одна система программирования пока не дает.
Недостатки стековой архитектуры
1. Психологические проблемы при программировании.
2. Необходимость реализации памяти со стековой архитектурой.