Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОБЗОРНАЯ ЛЕКЦИЯ ПО КУРСУ ЯП и МТ.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
141.53 Кб
Скачать

12 Генерация внутреннего представления программ

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

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

Основные свойства языка внутреннего представления программ:

  1. он позволяет фиксировать синтаксическую структуру исходной программы;

  2. текст на нем можно автоматически генерировать во время синтаксического анализа;

  3. его конструкции должны относительно просто транслироваться в объектный код либо достаточно эффективно интерпретироваться.

Некоторые общепринятые способы внутреннего представления программ:

  1. постфиксная запись

  2. префиксная запись

  3. многоадресный код с явно именуемыми результатами

  4. многоадресный код с неявно именуемыми результатами

  5. связные списочные структуры, представляющие синтаксическое дерево.

В основе каждого из этих способов лежит некоторый метод представления синтаксического дерева.

Замечание: чаще всего синтаксическим деревом называют дерево вывода исходной цепочки, в котором удалены вершины, соответствующие цепным правилам вида A → B, где A, B  N.

12.1 Польская запись

Польский математик Ян Лукашевич обнаружил, что при использовании функциональной записи выражения, в которой операция предшествует своим операндам (а не записывается между ними), скобки становятся излишними.

Пример. Инфиксной форме записи A+B соответствует префиксная форма записи (ПОЛИЗ) +AB.

Префиксная форма (или польская запись) формально может быть определена следующим образом:

  1. Всякая переменная или константа есть выражение.

  2. Если 1 – знак унарной (одноместной) операции, а  - выражение, то 1 является выражением

  3. Если 2 – знак бинарной (двухместной) операции, а 1 и 2 - выражения, то 112 является выражением

  4. Если n – знак n-местной операции, а 1, 2, …, n являются выражениями, то n12…n - выражение

  5. Других выражений не существует

В отличие от обычной алгебраической записи выражений префиксная форма однозначно определяет порядок выполнения операций. Например, выражение A+B+C+D можно интерпретировать по-разному, а префиксная запись выражения всегда однозначно определяет порядок выполнения операций.

Полноскобочная форма выражения

Префиксная форма выражения

((((A+B)+C)+D)

((A+B)+(C+D))

((A+(B+C))+D)

(A+((B+C)+D))

(A+(B+(C+D)))

+++ABCD

++AB+CD

++A+BCD

+A++BCD

+A+B+CD

Постфиксная форма (польская инверсная запись - ПОЛИЗ) определяется следующими правилами:

  1. Всякая переменная или константа есть выражение.

  2. Если 1 – знак унарной (одноместной) операции, а  - выражение, то 1 является выражением

  1. Если 2 – знак бинарной (двухместной) операции, а 1 и 2 - выражения, то 12 1является выражением

  2. Если n – знак n-местной операции, а 1, 2, …, n являются выражениями, то 12…n n - выражение

  3. Других выражений не существует

Поскольку изображение операции «унарный минус» совпадает с изображением операции «бинарный минус», то унарный минус можно представлять двумя способами: либо записывать его как бинарный оператор, т.е. –В представлять в виде 0-В, либо для унарного минуса ввести новый символ операции, например, символ «!».

Пример. Выражение (A+B)*C можно представить в польской инверсной записи как АВ+С*