Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_11SistProg.doc
Скачиваний:
68
Добавлен:
10.05.2015
Размер:
1.46 Mб
Скачать

Алгоритм э.Дейкстры перевода выражения в полиз (метод стека с приоритетами):

  1. Каждому знаку операции присваивается числовой приоритет. Он начинается с цифры 2 и операции, выполняемой в первую очередь, имеют больший приоритет.

  2. Открывающимся скобкам присваивается 0, закрывающимся 1.

  3. Входная строка читается слева направо. Операнды по мере считывания помещаются в выходную строку.

  4. Знаки перед записью в выходную строку помещаются в стек по следующему алгоритму:

    1. открывающаяся скобка (знак с приоритетом 0) помещается в стек

    2. если приоритет знака операции больше приоритета знака на вершине стека или стек пуст, новый знак добавляется в стек

    3. если приоритет знака меньше или равен приоритету знака на вершине стека, из стека в выходную строку “выталкиваются” все знаки с приоритетами, большими или равными приоритету входного знака. После этого входной знак записывается в стек

    4. закрывающаяся скобка выталкивается в выходную строку все знаки до открывающейся скобки. Открывающаяся скобка удаляется из стека, а закрывающаяся туда не записывается.

  1. после просмотра всех символов входной строки из стека выталкиваются оставшиеся знаки.

Например:

стек

Выходная строка

(

a

+(

ab

ab+

/

ab+

(/

ab+c

+(/

ab+cd

/

ab+cd+

ab+cd+/

Тетрады (четверки).

Это одна из форм представления программ в трансляторе. Это представление удобно для выполнения оптимизирующих преобразований программ. Четверки часто используются в оптимизирующихся анализаторах. Их можно рассматривать как команду некоторого используется следующий формат.

Например:

Операция, операнд 1, операнд 2, результат.

представляется в виде.

tl - временная переменная, в которой помещается результат .

Одна операция в арифметическом выражении порождает одну четверку. Выражение в целом - это последовательность четверок.

Пример:

1) : 2)

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

t2......нами уже была предусмотрена переменная counter. При выводе очередной четверки,

значение этой переменной увеличивается на 1 (+1).

Триады.

Также как тетрады, триады являются удобной промежуточной формой представления бинарных операций.

Формат имеет вид:

Операция, Операнд 1, Операнд 2

Здесь отсутствует поле для замен результата. Если необходимо использовать результат в качестве операнда, то в соответствующем поле записывается ссылка на триаду, в которой этот результат был получен.

Пример:

(1)

(2)

(3) -,(1),(2)

При использовании триад в качестве промежуточной формы экономится память по сравнению с тетрадами, т.к. часть временных переменных можно не хранить.

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