среда, 4 августа 2010 г.

Инструментарий для создания компиляторов


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

Генерация и оптимизация кода


4. Генерация промежуточного кода
В процессе трансляции исходной программы в целевой код компилятор может создавать одно или несколько промежуточных представлений различного вида. Синтаксические деревья являются видом промежуточного представления; обычно они используются в процессе синтаксического и семантического анализа.
После синтаксического и семантического анализа исходной программы мно­гие компиляторы генерируют явное низкоуровневое или машинное промежуточ­ное представление исходной программы, которое можно рассматривать как про­грамму для абстрактной вычислительной машины. Такое промежуточное пред­ставление должно обладать двумя важными свойствами: оно должно легко гене­рироваться и легко транслироваться в целевой машинный язык.

tl = inttofloat(60)
 t2 = id3 * tl                      
t3 = id2 + t2
idl = t3
(1.3)