Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
11_транс_1.doc
Скачиваний:
69
Добавлен:
30.11.2018
Размер:
167.94 Кб
Скачать

Стековые методы

Бауэр и Замельзон. Основные его компоненты СТЕК и таблица ПЕРЕХОДОВ. Анализатор использует два стека: один стек используется непосредственно при трансляции выражения, а второй стек – во время исполнения.

Стек транслятора имеет метку Т, а исполнительный – метку Е.

Транслятор прочитывает выражение один раз слева на право и вырабатывает последовательность команд двух видов:

KI (I – есть идентификатор) является командой « Выбрать число по имени I и заслать его в стек Е »

K§ (§ - операция) является командой « Выбрать два верхних операнда из стека Е, произвести над ними операцию § и занести результат в вершину стека Е ».

Когда при просмотре входной строки считываемый символ является ОПЕРАНДОМ выдается команда KI и транслятор переходит к следующему символу.

Когда считываемый символ является операцией § производится одно из нескольких фиксированных действий. Как правило, либо § засылается в стек Т, либо выдается команда К§.

В таблице переходов указывается, какие действия должен выполнять транслятор. В этой таблице каждой операции соответствует СТРОКА и СТОЛБЕЦ.

Элементами таблицы являются директивы транслятору.

Возможны 4 действия транслятора после прочтения операции § (операция в вершине стека Т обозначается h):

I:

Заслать § в Т; читать следующий символ

II:

Генерировать Кh; заслать § в Т. Читать следующий символ

III:

Читать из Т; Читать следующий символ (используется для удаления скобок)

IV:

Генерировать Кh; Читать из Т; Повторить с тем же самым входным символом.

Имеется еще две специальные команды: Конец процесса и Ошибка, которые приказывают транслятору остановится и выдать соответствующую команду. ПРОЦЕССОР выбирает элементы таблицы, используя в качестве одного индекса h, верхнюю операцию стека Т, и в качестве второго, §, операцию, прочитанную последней из входной строки. Таблицу мы приведем для трансляции с языка простых арифметических выражений. В этой таблице L обозначает символ пробела, или пустую строку. Если стек Т пуст или пуста входная строка, то считается что прочитано L § - входной символ h - вершина стека Т.

Таблица переходов для простых алгебраических выражений.

Стек T\Строка

L

(

+

-

*

/

)

L

Конец

I

I

I

I

I

Ошибка

(

Ошибка

I

I

I

II

II

III

+

IV

I

II

II

I

I

IV

-

IV

I

II

II

I

I

IV

*

IV

I

IV

IV

II

II

IV

/

IV

I

IV

IV

II

II

IV

Применим этот процесс к конкретному выражению (a*b+c*d)/(a-d)

Т

Прочитанный символ

Действие

Выдать

L

(

I

(

a

Ka

(

*

I

(*

b

Kb

(*

+

IV

K*

(

Повторить

I

(+

c

Kc

(+

*

I

(+*

d

Kd

(+*

)

IV

K*

(+

Повторить

IV

K+

(

Повторить

III

L

/

I

/

(

I

/(

a

Ka

/(

-

I

/(-

d

Kd

/(-

)

IV

K-

/(

Повторить

III

/

+

IV

K/

Получается последовательность команд, имеющая вид:

Ka, Kb, K*, Kc, Kd, K*, K+, Ka, Kd, K -, K/

Более простая запись получается, если опустить все скобки и использовать польскую запись (польский математик Лукасевич): ab*cd*+ad-/bc*+

Исполняющая программа использует стек Е и читает польскую запись слева направо.

При чтении операнда он засылается в стек при чтении операции она применяется к двум верхним элементам E. Для записи, выдаваемой транслятором, не возникает явных или неявных проблем старшинства. Программа выполняется в точности слева направо. Временная память автоматически управляется стеком E, содержащим все временные промежуточные значения. Не требуется стек T для хранения операндов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]