Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Компилятор программное средство, которое используется для трансляции программ с языка высокого уровня. Основная задача компилятора состоит в поиске соответствия предложений исходного текста грамматическим конструкциям языка и генерация соответствующего кода для каждого предложения.
Функции:
Лексический анализ. Происходит разбор текста программы. Используются три таблицы: таблица терминальных символов (хранит все ключевые слова и специальные символы, используемые в языке, а также коды, соответствующие каждому символу); таблица символических имен (заполняется в процессе разбора текста программы и хранит в себе имена идентификаторов); таблица литералов (заполняется в процессе разбора программы и хранит в себе литералы: численные и строковые значения, с указанием типов данных и относительных адресов).
Сканер в процессе анализа текста программы выделяет один из элементов текста и сравнивает с каждым терминальным символом. Если такой символ найден, то в выходной код передаются код таблицы и спецификатор (номер строки в таблице). В случае если этот элемент не является терминальным символом, проверяется, является ли он идентификатором (первый символ обычно буква, остальные могут быть либо буквой, либо цифрой), если такой определен, то данный элемент заносится в таблицу символических имен, а к выходному коду добавляется пара численных значений: номер таблицы и спецификатор найденного элемента. В случае если такой элемент в таблице уже имеется, то в выходной код заносится номер таблицы и его спецификатор. В таблицу литералов заносят численные, строковые и иные определенные языком значения. При этом распознается тип значения и тут же заполняется относительная таблица адресов.
Лексема |
Код |
|||
program |
1 |
|||
var |
2 |
|||
begin |
3 |
|||
end |
4 |
|||
… |
… |
|||
№ |
Лит. |
Тип |
Р. |
А. |
1 |
1 |
integer |
2 |
0 |
2 |
100 |
integer |
2 |
2 |
…. |
… |
… |
… |
… |
№ |
Идентиф. |
Тип |
||
1 |
I |
integer |
||
2 |
Y |
integer |
||
3 |
X |
real |
||
… |
… |
… |
FOR I:=1 TO 100 DO Y:=X → <1,6><2,1><1,14><3,1><1,7><3,2><1,8><2,2><1,14><2,3>
Синтаксический разбор. Предложения программы распознаются как языковые конструкции используемой грамматики. Для того, чтобы выяснить, принадлежит ли предложение языку, необходимо построить алгоритм, который для любого предложения, допустимого грамматикой, давал бы последовательность выводов этой цепочки к начальному символу грамматики. Методы: восходящие и нисходящие. Например, метод операторного предшествования. Метод операторного предшествования основан на анализе пар последовательно расположенных операторов исходной программы и решением вопроса о том, какой из них должен выполняться первым.
A+B*C-D; + <∙ *; * ∙> -; В*С должно быть вычислено до обработки любых других операторов выражения. Для операторов языка программирования задается матрица предшествования. Предложение сканируется слева направо до тех пор, пока не будет найдено подвыражение, операторы которого имеют более высокий уровень предшествования, чем соседние операторы. Далее это подвыражение распознается в терминах правил вывода используемой грамматики. Этот процесс продолжается до тех пор, пока не достигнут корень дерева, что и будет означать окончание процесса грамматического разбора. Пример синтаксического дерева: READ (SUM)
Генерация объектного кода. Выполняется семантический контроль (анализ предложения с точки зрения смыслового значения предложений языка). Машинно-зависимая оптимизация. Для каждой грамматической конструкции определены алгоритмы генерации кода. Из отдельных объектов составляется объектный код программы. После генерации каждого фрагмента, указатель свободной памяти модифицируется таким образом, чтобы он указывал на первую свободную ячейку памяти.
<read>
EAD
(
id
)
{SUM}