Пред.Страница След.Страница  Раздел Содержание


 

7.2. Выходной язык и таблицы преобразователя

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

 

 

Рис. 7.1. Структуры атомов.

 

Атомы создаются преобразователем последовательно в процессе синтаксического анализа. Для их сохранения используется таблица атомов ATomTable .. Схема записей этой таблицы соответствуют структурам, приведенным на рис. 7.1.

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

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

·        Указатель на символьное представление переменной (pt_LexTab), сохраняемое в таблице LexTab.

·        Указатель на значение переменной (pt_TVL), сохраняемое в таблице VariableTable.

·        Значение типа переменной (type).

·        Свойство, показывающее получила ли переменная значение (hasvalue).

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

Структура записи таблицы TVR может быть изображена так, как это показано на рисунке 7.2.

 

 

Рис. 7.2. Схема записи таблицы переменных.

 

Каждую из этих таблиц представим в виде массива записей определенного вида. Для работы с таблицами в общем случае потребуются методы get() для получения определенной записи и ее полей, а так же методы set() для построения записей и заполнения ее полей. Кроме того, целесообразно для каждой таблицы определить метод print(), который может быть использован как на этапе отладки, так и для вывода результатов. Все упомянутые методы при неудачном завершении должны возвращать значение 0.

 


Пред.Страница След.Страница  Раздел Содержание