Содержание
- 2. Системное программное обеспечение Тема № 15 Семантический анализ
- 3. Системное программное обеспечение Семантический анализ Назначение семантического анализа Полный распознаватель для языка программирования можно построить на
- 4. Системное программное обеспечение Семантический анализ Назначение семантического анализа Для проверки семантической правильности входной программы необходимо иметь
- 5. Системное программное обеспечение Семантический анализ Назначение семантического анализа Семантический анализ обычно выполняется на двух этапах компиляции:
- 6. Системное программное обеспечение Семантический анализ Этапы семантического анализа Семантический анализатор выполняет следующие основные действия: проверку соблюдения
- 7. Системное программное обеспечение Семантический анализ Этапы семантического анализа Примерами таких соглашений являются следующие требования: каждая метка,
- 8. Системное программное обеспечение Семантический анализ Этапы семантического анализа а := b + с; если не описан
- 9. Системное программное обеспечение Семантический анализ Этапы семантического анализа Семантический анализатор выполняет следующие основные действия: дополнение внутреннего
- 10. Системное программное обеспечение Семантический анализ Этапы семантического анализа Семантический анализатор выполняет следующие основные действия: проверку элементарных
- 11. Системное программное обеспечение Семантический анализ Этапы семантического анализа Примерами таких соглашений являются следующие требования: каждая переменная
- 13. Скачать презентацию
Системное программное обеспечение
Тема № 15
Семантический анализ
Системное программное обеспечение
Тема № 15
Семантический анализ
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Полный распознаватель для языка программирования можно
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Полный распознаватель для языка программирования можно
Однако такой распознаватель имеет экспоненциальную зависимость требуемых для выполнения разбора цепочки вычислительных ресурсов от длины входной цепочки.
Компилятор, построенный на основе такого распознавателя, будет неэффективным с точки зрения либо скорости работы, либо объема необходимой памяти.
Поэтому такие компиляторы практически не используются, а все реально существующие компиляторы на этапе разбора входных цепочек проверяют только синтаксические конструкции входного языка, не учитывая его семантику.
С целью повышения эффективности компилятора разбор цепочек входного языка выполняется в два этапа:
синтаксический разбор на основе распознавателя одного из известных классов КС-языков;
семантический анализ входной цепочки.
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Для проверки семантической правильности входной программы
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Для проверки семантической правильности входной программы
Эта информация помещается в таблицу лексем на основе конструкций, найденных синтаксическим распознавателем. Примерами таких конструкций являются блоки описания констант и идентификаторов (если они предусмотрены семантикой языка) или операторы, где тот или иной идентификатор встречается впервые (если описание происходит по факту первого использования).
Поэтому полный семантический анализ входной программы может быть произведен только после полного завершения ее синтаксического анализа.
ТИ
Семантический анализатор
Внутреннее
представление
программы
Дерево
синтаксического
разбора
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Семантический анализ обычно выполняется на двух
Системное программное обеспечение
Семантический анализ
Назначение семантического анализа
Семантический анализ обычно выполняется на двух
на этапе синтаксического анализа (каждый раз по завершении распознавания определенной синтаксической конструкции (как правило, это процедуры, функции и блоки операторов входного языка) входного языка выполняется ее семантическая проверка на основе имеющихся в таблице идентификаторов данных).
в начале этапа подготовки к генерации кода (после завершения всей фазы синтаксического анализа, выполняется полный семантический анализ программы на основании данных в таблице идентификаторов (сюда попадает, например, поиск неописанных идентификаторов)).
Иногда семантический анализ выделяют в отдельный этап (фазу) компиляции.
В каждом компиляторе обычно присутствуют
оба варианта семантического анализатора.
Конкретная их реализация зависит
от версии компилятора
и семантики входного языка.
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
проверку
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
проверку
заключается в сопоставлении входных цепочек программы с требованиями семантики входного языка программирования.
Каждый язык программирования имеет четко заданные и специфицированные семантические соглашения, которые не могут быть проверены на этапе синтаксического анализа. Именно их в первую очередь проверяет семантический анализатор.
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Примерами таких соглашений являются следующие требования:
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Примерами таких соглашений являются следующие требования:
каждый идентификатор должен быть описан один раз, и ни один идентификатор не может быть описан более одного раза (с учетом блочной структуры описаний);
все операнды в выражениях и операциях должны иметь типы, допустимые для данного выражения или операции;
типы переменных в выражениях должны быть согласованы между собой;
при вызове процедур и функций число и типы фактических параметров должны быть согласованы с числом и типами формальных параметров.
Конкретный состав требований, которые должен
проверять семантический анализатор, жестко
связан с семантикой входного языка
(например, некоторые языки допускают не
описывать идентификаторы определенных типов).
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
а := b + с;
если не
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
а := b + с;
если не
если это числовые переменные и константы, то выполняется оператор сложения
если это строковые переменные и константы, то выполняется оператор конкатенации строк
идентификатор а не может быть константой – иначе нарушается семантика оператора присваивания
если одни из идентификаторов числа, а другие – строки, или идентификаторы массивов или структур, то такое сочетание аргументов для операции сложения недопустимо
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
дополнение
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
дополнение
связано с преобразованием типов операндов в выражениях и при передаче параметров в процедуры и функции.
а := b + с;
var
а : real;
b : integer;
с : double;
преобразование целочисленной переменной b в формат вещественных чисел с двойной точностью;
сложение двух вещественных чисел с двойной точностью;
преобразование результата в вещественное число с одинарной точностью;
присвоение результата переменной а.
Существуют правила преобразования типов, принятые для данного языка.
Эти преобразования может сделать разработчик программы – но тогда
преобразования типов в явном виде будут присутствовать в
тексте входной программы (в рассмотренном примере это не так).
В другом случае это делает код, порождаемый компилятором, когда
преобразования типов в явном виде в тексте программы не присутствуют,
но неявно предусмотрены семантическими соглашениями языка.
Для этого в составе библиотек функций, доступных компилятору,
должны быть функции преобразования. Вызовы этих функций
как раз и будут встроены в текст результирующей программы
для удовлетворения семантических соглашений о преобразованиях
типов во входном языке, хотя в тексте программы
в явном виде они не присутствуют.
Чтобы это произошло, эти функции должны быть встроены
и во внутреннее представление программы
в компиляторе. За это также отвечает семантический анализатор.
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
проверку
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Семантический анализатор выполняет следующие основные действия:
проверку
является сервисной функцией, которую предоставляют большинство современных компиляторов.
Эта функция обеспечивает проверку компилятором некоторых соглашений, применимых к большинству современных языков программирования, выполнение которых связано со смыслом как всей входной программы в целом, так и отдельных ее фрагментов.
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Примерами таких соглашений являются следующие требования:
Системное программное обеспечение
Семантический анализ
Этапы семантического анализа
Примерами таких соглашений являются следующие требования:
каждая переменная должна быть определена до ее первого использования при любом ходе выполнения программы (первому использованию переменной должно всегда предшествовать присвоение ей какого-либо значения);
результат функции должен быть определен при любом ходе ее выполнения;
каждый оператор в исходной программе должен иметь возможность хотя бы один раз выполниться;
операторы условия и выбора должны предусматривать возможность хода выполнения программы по каждой из своих ветвей;
операторы цикла должны предусматривать возможность завершения цикла.
Конкретный состав проверяемых соглашений
зависит от семантики языка. Однако в отличие
от семантических требований языка, строго проверяемых
семантическим анализатором, выполнение данных
соглашений не является обязательным.