Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Обнаружение ошибок и сообщение о них




Управление таблицей символов

Фазы компилятора

Концептуально компилятор работает пофазно. В процессе каждой фазы про­исходит преобразование исходной программы из одного представления в другое. Типич­ное разбиение компилятора на фазы показано на рис. 1.

 
 

 


Рис. 1. Фазы компилятора

На практике некоторые фазы могут быть сгруппированы вместе и промежуточные представления программы внутри таких групп могут явно не строиться. Управление таблицей символов и обработка ошибок пока­заны во взаимодействии с шестью фазами: лексическим анализом, синтаксическим ана­лизом, семантическим анализом, генерацией промежуточного кода, оптимизацией кода и генерацией кода. Неформально диспетчер таблицы символов и обработчик ошибок так­же могут считаться "фазами" компилятора.

 

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

Таблица символов представляет собой структуру данных, содержащую записи о каж­дом идентификаторе с полями для его атрибутов. Данная структура позволяет быстро найти информацию о любом идентификаторе и внести необходимые изменения.

Если лексическим анализатором в исходной программе обнаружен идентификатор, он записывается в таблицу символов. Однако атрибуты идентификатора обычно не могут быть определены в процессе лексического анализа. Например, в объявлении переменных на языке Pascal

Var name1, name2, name3: real;

когда лексический анализатор находит идентификаторы name1, name2, name3, их тип real еще неизвестен.

В процессе остальных фаз информация об идентификаторах вносится в таблицу сим­волов и используется различными способами. Например, при семантическом анализе и генерации промежуточного кода необходимо знать типы идентификаторов, чтобы гаран­тировать их корректное использование в исходной программе и сгенерировать правиль­ные операции по работе с ними. Обычно генератор кода вносит в таблицу символов и использует детальную информацию о памяти, назначенной идентификаторам.

 

В каждой фазе компиляции могут встретиться ошибки. Однако после их обнаружения необходимы определенные действия, чтобы продолжить компиляцию и выявить другие ошибки в исходной программе. Компилятор, который останавливается при обнаружении первой же ошибки, не настолько полезен в работе. В процессе синтаксического и семантического анализа обычно обрабатывается боль­шая часть ошибок, обнаруживаемых компилятором.

При лексическом анализе выявля­ются ошибки, при которых символы из входного потока не формируют ни одну из лексем языка.

При синтаксическом анализе выявля­ются ошибки, при которых поток нарушает структурные правила (синтаксис) языка.

В процессе семантиче­ского анализа компилятор пытается обнаружить конструкции, корректные с точки зре­ния синтаксиса, но не имеющие смысла с точки зрения выполняемых операций, напри­мер попытка сложения двух идентификаторов, один из которых — имя массива, а вто­рой — имя процедуры.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 752; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.