Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы_2.docx
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
34.13 Кб
Скачать

Виды объединенных модулей:

а) абсолютные – команды загружаемые в определенную область памяти

б) перемещаемые – (наиболее распространенные тип) ОС перемещает модуль в свободную память. Состоит из команды + таблицы настраиваемых элементов (адресов?)

в) в виде текста на языке ассемблера. В свою очередь он потом переводится в машнинный код.

Проход транслятора – это однократный просмотр входной программы с выполнением каких-либо транслирующих действий.

Минимальное теоретически достижимое кол-во проходов – от 1 до 3 – зависит от свойств конкретного языка. Кол-во проходов зависит от контекста.

На практике количество проходов намного больше. Возможно до 9 раз.

Формы передачи данных между фазами:

а) Таблицы

б) Скомпилированные команды

Краткая характеристика отдельных фаз

  1. Лексический анализ

Лексема – неделимая словарная единица языка.

Синтаксический класс – принято классифицировать лексемы относя их к тому или иному синтаксическому классу.

Примеры синтаксических классов:

а) Имена (или идентификаторы)

б) Литералы (непосредственные данные)

в) Зарезервированные слова

г) Операторы

д) Разделители

е) Другие

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

Пример однородного представления – таблица однородных символов.

Транслируемая строка:

A=(B+ARG)+77⌐

GOTO_MET(99

Синтаксический класс

Ссылка на соотв.таблицу

Имя

1

Разделитель

6

Разделитель

2

Имя

2

Оператор

1

Имя

3

Разделитель

3

Оператор

3

Литерал

1

Разделитель

5

слово

3

Разделитель

4

Имя

4

Таблица имен

Имя

Адресс

Другие

1

A

2

B

3

ARG

4

MET99

Раздел.

1

,

2

(

3

)

4

_

5

6

=

7

.

1

+

2

-

3

*

4

/

слово

1

BEGIN

2

END

3

GOTO

Таблица литералов

Исх. значение

Двоичный код

Адресс

1

77

Выводы

а) Табличная форма не единственное представление

б) Необязательная фаза но в большинстве своем присутствующая.

в) Не обязательно выделять на эту фазу проход

2) Синтаксический анализ

Означает выявление синтаксической корректности входных предложений.

3) Семантические анализ

Означается выявление смысла операторов. Обычно идет в купе с синтаксическим анализом.

4) Генератор внутренних форм

Типовые внутренние формы:

а) матрица

б) обратная польская запись

в) список

г) дерево

5) Генератор внутренних форм

Критерии:

а) Минимизация времени выполнения программы

б) Минимизация требуемой памяти

в) достижения разумного компромисса между этими двумя критериями

Виды оптимизации:

1.1. Машинно-независимая.

- Приведение общих подвыражений

- Оптимизация циклов – вынесение за тело цикла не относящихся к нему вычислений.

- оптимизация логических выражений и подвыражений

- другие

1.2 Машинно-зависимая

Оптимизация с учетом аппаратурной особенности.

2.1. Локальная

только для отдельных фрагментов

2.2. Глобальная

Для всего модуля. На порядок сложнее чем локальная.

6) Разделение памяти и генерация кода

а) Фактическая – всем элементам в соответствие ставятся адреса

б) Символическая – директивы резервирования памяти (в случае если компилируется на ассемблер)

Элементы теории формальных языков

1) Если бы число допустимых предложений какого-либо языка было бы конечным то их можно было бы просто перечислить.

Грамматика – это конечное непустое множество правил, позволяющих генерировать все допустимые предложения какого-либо языка. В трансляторах при анализе входного текста эти же правила используются обратным ходом.

Для записи правил необходим формализованный алгоритм. Один из является форма Бэкуса-Наура (БНФ)

левая часть ::= правая часть

Символы

- терминальные (неделимые символы)

- нетерминальные (<нетерминалы>) служат для отображения промежуточной стадии генерации предложений.

| -символ альтернативной подстановки («или»)

E – пустое множество

Принцип конкатенации, т.е. перемещательный принци не действует (а + с != с + а)

Пример:

a) <предложение> ::= <подлежащее><сказуемое><группа дополнение>

b) <подлежащее> ::= автомобиль | синий троллейбус | телега | трактор

с) <сказуемое> ::= едет | несется | еле движется

d) <группа дополнение> ::= по улице | по мостовой | по рельсам

<предложение> -(a)- <подлежащее><сказуемое><группа дополнение> -(b2)- синий троллейбус <сказуемое><группа дополнений> -(c1)- синий троллейбус несется <группа дополнений>-(d1)- синий троллейбус несется по улице