М.Ю. Харламов, ВНУ им. В.Даля, 2010. Семантический анализатор Семантический анализатор выполняет следующие основные действия: проверку соблюдения во входной.

Презентация:



Advertisements
Похожие презентации
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Advertisements

ЛАБОРАТОРНАЯ РАБОТА 1 ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ТАБЛИЦ, ИСПОЛЬЗУЕМЫХ В ТРАНСЛЯТОРЕ Рейн Т. С.
Подпрограммы. Субкомпетенции: 1. Обработка данных с помощью стандартных подпрограмм и подпрограмм, определённых пользователем. 2. Организация передачи.
М.Ю. Харламов, ВНУ им. В.Даля, Генерация объектного кода это перевод компилятором внутреннего представ­ления исходной программы в цепочку символов.
Процедуры и функции Вербицкая Ольга Владимировна, Заозерная школа 16.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
М.Ю. Харламов, ВНУ им. В.Даля, Оптимизация программы Оптимизация программы это обработка, связанная с переупорядочиванием и из­менением операций.
Подпрограммы: процедуры и функции Информатика. 1. Подпрограммы При решении различных задач часто возникает необходимость проводить вычисления по одним.
Хочу быть программистом! С чего бы начать? Turbo Pascal.
Алгоритм и его свойства. Алгоритм Алгоритм – это описанная на некотором языке, точная конечная система правил, определяющая содержание и порядок действий.
Язык высокого уровня компилятор Программа компиляторов Сделал:Студент группы:Ис-2о(очная)Воротов Валентин.
Семантический анализ КC-грамматики, с помощью которых описывают синтаксис языков программирования, не позволяют задавать контекстные условия (КУ), имеющиеся.
Формальные и фактические параметры Вызов по ссылке и значению.
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Введение в теорию компиляции Основные принципы построения трансляторов.
Подпрограммы в Паскале Подпрограммы в Паскале (Технология нисходящего программирования)
ПРОЦЕДУРЫ И ФУНКЦИИ CPascal Подпрограмма – группа операторов реализующая законченный алгоритм и оформленная как самостоятельная синтаксическая единица.
Процедуры и функции Процедуры пользователя. Общие сведения Если в программе возникает необходимость частого обращения к некоторой группе операторов, выполняющих.
Транксрипт:

М.Ю. Харламов, ВНУ им. В.Даля, 2010

Семантический анализатор Семантический анализатор выполняет следующие основные действия: проверку соблюдения во входной программе семантических соглашений вход­ного языка дополнение внутреннего представления программы в компиляторе операто­рами и действиями, неявно предусмотренными семантикой входного языка проверку элементарных семантических (смысловых) норм языков програм­мирования, напрямую не связанных со входным языком Тема 7. Семантический анализ 2

3 Семантический анализатор Таблица идентификаторов Результаты синтаксического анализа Результаты проверки семантической правильности программы

каждая метка, на которую есть ссылка, должна один раз присутствовать в про­грамме каждый идентификатор должен быть описан один раз и ни один идентифика­тор не может быть описан более одного раза (с учетом блочной структуры описаний) все операнды в выражениях и операциях должны иметь типы, допустимые для данного выражения или операции типы переменных в выражениях должны быть согласованы между собой при вызове процедур и функций число и типы фактических параметров долж­ны быть согласованы с числом и типами формальных параметров и т.д. Тема 7. Семантический анализ 4

5 a := b + c; Идентификаторы должны быть описаны a a не может быть константой Вид операции определяется типом аргументов (конкатенация или алгебр.сложение) Идентификаторы должны быть совместимы для использования операции + (или строковые, или числовые)

Cвязано с добавлением в текст программы операторов и действий, неявно предусмотренных семантикой входного языка преобразование типов операндов в выражениях и при передаче параметров в процедуры и функции операции вычисления адреса, когда происходит обращение к элементам сложных структур данных Тема 7. Семантический анализ 6

7 a := b + c; var а : double: b : integer; с : real; var а : double: b : integer; с : real; Исходный текст Код, порождаемый компилятором a := double( real(b) + c); Вариант разработчика a := double(b + trunc(c)); (Без использования явного преобразования типов) (С использованием явного преобразования типов)

Обеспечивает проверку компилятором соглашений, выполнение которых связано со смыслом как всей исходной программы в целом, так и отдельных ее фрагмен­тов каждая переменная или константа должна хотя бы один раз использоваться в программе; каждая переменная должна быть определена до ее первого использования при любом ходе выполнения программы (первому использованию перемен­ной должно всегда предшествовать присвоение ей какого-либо значения); результат функции должен быть определен при любом ходе ее выполнения каждый оператор в исходной программе должен иметь возможность хотя бы один раз выполниться; операторы условия и выбора должны предусматривать возможность хода вы­полнения программы по каждой из своих ветвей; операторы цикла должны предусматривать возможность завершения цикла … Тема 7. Семантический анализ 8

9 int f_test(int а) {int b, c; b = 0; c = 0; if (b=1) { return a;} c = a + b; } int f_test(int а) {int b, c; b = 0; c = 0; if (b=1) { return a;} c = a + b; }

Идентификация переменных, типов, процедур, функций и др. лексических единиц языков программирования это установление однозначного соответст­вия между лексическими единицами и их именами в тексте исходной програм­мы имена лексических единиц не должны совпадать как между собой, так и с ключевыми словами синтаксических конструкций языка локальные переменные имеют область видимости Тема 7. Семантический анализ 10

На этапе семантического анализа каждой лексической единице языка дается уникальное имя в пределах всей исход­ной программы и потом используется при синтезе результирующей программы имена локальных переменных дополняются именами тех блоков (функций, процедур), в которых эти переменные описаны имена внутренних переменных и функций модулей исходной программы до­полняются именами самих модулей имена процедур и функций, принадлежащих объектам (классам) в объектно-ориентированных языках программирования дополняются наименованиями типов объектов (классов), которым они принадлежат имена процедур и функций модифицируются в зависимости от типов их фор­мальных аргументов и др. Тема 7. Семантический анализ 11