Читайте также:
|
|
При создании целевой программы, кроме компилятора, может потребоваться и ряд других программ. Исходная программа может быть разделена на модули, хранимые в отдельных файлах. Задача сбора исходной программы иногда поручается отдельной программе — препроцессору, который может также раскрывать в тексте исходной программы сокращения, называемые макросами.
На рис. 1.3 показана типичная "компиляция". Целевая программа, создаваемая компилятором, может потребовать дополнительной обработки перед запуском. Компилятор, представленный на рис. 1.3, создает ассемблерный код, который переводится ассемблером в машинный код, а затем связывается ("линкуется") совместно с некоторыми библиотечными программами в реально запускаемый на машине код.
В следующих двух разделах мы рассмотрим компоненты компилятора; остальные программы, представленные на рис. 1.3, будут рассмотрены в разделе 1.4.
Скелетная исходная программа |
Препроцессор |
Исходная программа |
Компилятор |
Целевая ассемблерная программа |
Ассемблер |
Перемещаемый машинный код |
Загрузчик / редактор связи |
Библиотека, объектные файлы |
Абсолютный машинный код |
Рис. 1.3. Система обработки языка
Анализ исходной программы
В этом разделе будет рассмотрен процесс анализа и проиллюстрировано его использование в некоторых языках форматирования текста. Детальнее об этом будет говориться в главах 2-4 и 6. При компиляции анализ состоит из трех фаз.
Линейный анализ, при котором поток символов исходной программы считывается слева направо и группируется в токены (token), представляющие собой последовательности символов с определенным совокупным значением.
1. Иерархический анализ, при котором символы или токены иерархически группируются во вложенные конструкции с совокупным значением.
2. Семантический анализ, позволяющий проверить, насколько корректно совместное размещение компонентов программы.
Лексический анализ
В компиляторах линейный анализ называется лексическим, или сканированием. Например, при лексическом анализе символы в инструкции присвоения
position:= initial + rate * 60 будут сгруппированы в следующие токены.
1. Идентификатор position.
2. Символ присвоения: =.
3. Идентификатор initial.
4. Знак сложения.
5. Идентификатор rate.
6. Знак умножения.
7. Число 60.
Пробелы, разделяющие символы этих токенов, при лексическом анализе обычно отбрасываются.
Дата добавления: 2015-11-30; просмотров: 23 | Нарушение авторских прав