|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Синтаксис и семантика. Структура компилятораЛюбой язык обязательно подчиняется определенным правилам, которые определяют его синтаксис и семантику. Синтаксис – это совокупность правил, определяющих допустимые конструкции языка, т. е. его форму. Семантика – это совокупность правил, определяющих логическое соответствие между элементами и значением синтаксически корректных предложений, т. е. содержание языка. Процесс компиляции предполагает распознавание конструкций исходного языка (анализ) и сопоставление каждой правильной конструкции семантически эквивалентной конструкций другого языка (синтез). Он включает несколько этапов. 1. Лексический анализ – процесс преобразования исходного текста в строку однородных символов. Каждый символ результирующей строки – токен соответствует слову языка – лексеме и характеризуется набором атрибутов, таких как тип, адрес и т. п., поэтому строку токенов часто представляют таблицей, строка которой соответствует одному токену. Лексема обозначает относительно простое понятие языка. Всего существует 2 типа лексем: а) лексемы, соответствующие символам алфавита языка, такие как «Служебные слова» и «Служебные символы»; б) лексемы, соответствующие базовым понятиям языка, такие как «Идентификатор» и «Литерал». Пример. При лексическом разборе предложения: if Sum>5 then pr:= true; будет получена строка токенов (см. таблицу 1) и, возможно, расширены таблицы переменных (см. таблицу 2) и литералов (см. таблицу 3): Таблица 1 – Пример строки токенов
Таблица 2 –Таблица идентификаторов переменных Таблица 3 – Таблица литералов
2. Синтаксический анализ – процесс распознавания конструкций языка в строке токенов. Главным результатом является информация об ошибках в выражениях, операторах и описаниях программы. Пример. На этом этапе для предыдущего примера должны быть распознаны конструкции: <Логическое выражение>, <Оператор присваивания>, <Оператор if >. 3. Семантический анализ – процесс распознавания/проверки смысла конструкции. По результатам распознавания строится последовательность, приближенная к последовательности операторов будущей программы и выполняются предусмотренные проверки правильности программы. Пример. На этом этапе может быть проверена инициализация переменной Sum. 4. Распределение памяти – процесс назначения адресов для именованных констант и переменных программы. 5. Генерация и оптимизация объектного кода – процесс формирования программы на выходном языке, которая семантически эквивалентна исходной программе. На этом этапе также обычно выполняется оптимизация генерируемого кода. Лексический и синтаксический анализ предполагают выполнение грамматического разбора. При их построении используют специальный математический аппарат – формальные грамматики. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |