1. 1Упрощенная модель компилятора - polpoz.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Сурс по спецкурсу «Социальная политика» 1 71.82kb.
Руководство по эксплуатации Модель bl 5xxx 1 151.09kb.
Математична модель рівноваги в системі “вода водяна пара” 1 65.64kb.
Модель фасетного информационного поиска в коллекции научных материалов 1 140.68kb.
Модель (Model). Модель предоставляет данные (обычно для View) 1 160.93kb.
Реферат з концепції сучасного природознавства на тему: Сучасна модель... 1 131.39kb.
И. Сильванович моделирование. Системы счисления. Основы формальной... 1 184.58kb.
«детский телеканал как актуальная модель телевидения для подрастающего... 1 19.78kb.
Цель урока: – сформировать понятие “модель”, изучить основные виды... 1 133.46kb.
Модель народного капіталізму: стійкість та адаптивність до будь-яких... 4 412.52kb.
Данная модель предназначена для сухой и/или влажной уборки, дома... 1 47.81kb.
В. К. Смирнов Аппаратная реализация языка Рефал 1 287.99kb.
1. На доске выписаны n последовательных натуральных чисел 1 46.11kb.

1. 1Упрощенная модель компилятора - страница №1/1

1.1Упрощенная модель компилятора

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


Лексический

блок


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

блок


Генератор кода

Таблицы


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

Рассмотрим каждый блок подробнее.



1.2Лексический блок

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



Пример: begin а:= 6; end  begin | а | := | 6 | ; | end

Лексический блок устанавливает из каких частей состоит данная цепочка: ключевое слово begin, идентификатор переменной length, знака присваивания :=, целочисленной константы 6, точки с запятой ; и ключевого слова end. Таким образом, цепочка из 21 символа была преобразована в цепочку из 6 лексем.



Лексема – совокупность форм и значений, свойственных одному и тому же слову во всех его употреблениях и реализациях.
Пример: ПИЛА – существительное, ж.р., ед.ч. или глагол, 3.л., ед.ч., пр.в.
Каждая лексема состоит из класса и его значения:
лексема= (класс, значение).
Пример: переменная а1: класс идентификатор (19), значение – указатель на элемент таблицы идентификаторов (19,4).

Указатель на таблицу идентификаторов фактически является внутренним именем переменной.

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

1.3Синтаксический блок

Синтаксический блок (парсер) переводит последовательность лексем, построенную сканером, в последовательность лексем, которая непосредственно отражает порядок, в котором должны выполняться операции в программе.



Пример: A+B*C

Лексический анализ:

А (19, 1)

+ (14, 0)

B (19, 2)

* (15, 0)

C (19, 3)

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



умнож (B, C, R1) – атом №1

слож (A, R1, R2) – атом №2
Таким образом, 5 лексем, выданных лексическим блоком преобразуются в две новые единицы, которые описывают тоже действие.

Эти единицы называют атомами. Они образуют выход блока синтаксического анализа.

Последовательность атомов отражает действия и их порядок.

Каждый атом также состоит из класса и значения.

Атом №1 может принадлежать к классу УМНОЖ и иметь значение, состоящее из трех указателей на элементы таблицы: умнож(2, 3, 1).

При этом третий операнд - указатель на таблицу вспомогательных регистров, а не на таблицу идентификаторов.

Аналогично: слож (1, 4, 2).

Во время обработки компилятором, атом будет представлен числом обозначающих умнож и тремя указателями на элементы таблиц: (5, 2, 3, 1).□


Синтаксический блок должен учитывать структуру языка, так же, как при переводе с естественного языка учитываются его грамматические особенности (место сказуемого, подлежащего и т.п.).

1.4Генератор кода

Генератор кода «развертывает» атомы, построенные синтаксическим блоком в последовательность команд ЭВМ. Характер развертывания зависит от элементов таблицы, на которые ссылаются атомы, а также от ожидаемого состояния машины в момент выполнения команд.



Пример: Для атома умнож(B, C, R1) развертка зависит от типа операндов В и С, места, где хранятся операнды, и содержимого регистров машины. Целые операнды требуют умножения с фиксированной точкой, операнды с плавающей точкой – умножения с плавающей точкой, смешанные – требуют команд преобразования типов.

Чтобы порождаемый код был эффективен, часто требуется производить анализ содержимого регистров машины в период выполнения программы. Это позволяет избежать повторной загрузки уже доступной информации и выбрать подходящие регистры для хранения переменных, промежуточных результатов и разнообразной изменяемой информации. Выбор конкретной схемы работы с регистрами зависит от типа ЭВМ.

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

Пример: Семантика идентификатора может включать его тип, а в случае, если это массив, то и его размерность.

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



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

  2. действия, зависящие от типа данных.

Пример: При развертывании атома умнож(В, С, R1) генератор кода порождает команды с фиксированной точкой или с плавающей в зависимости от операндов.
В случае препроцессора семантическая обработка может заключаться в построении внутренней структуры предложения исходного языка, например в виде семантического графа или деревьев составляющих.

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



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

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


izumzum.ru