Теория языков программирования

  • 07 апр. 2012 г.
  • 1409 Слова
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МАГНИТОГОРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ИМ. Г.И. НОСОВА»



Кафедра «Вычислительной техники и прикладной математики»




КУРСОВАЯ РАБОТА
по дисциплине «Теория языков программирования и методы трансляции»
на тему: проектирование иразработка компилятора языка C






Исполнитель: Коляда А.И. студент 4 курса, группа АВБ-08
Руководитель: Калитаев А.Н., к.т.н.









Магнитогорск, 2011

ОГЛАВЛЕНИЕ


1 Введение 3
2 Лексический анализ 4
3 Заключение 8
4 Список использованной литературы 9
Приложение 10





1 Введение

Задачей данной курсовой работы ставилось проектирование, и реализацияанализирующей части компилятора состоящей из следующих фаз:

1) лексический анализ;




Основной задачей компилятора является анализ программы на входном языке и создание эквивалентной объектной программы, т.е. перевод программы с одного языка на другой. Входом компилятора служит цепочка символов, составляющая исходную программу на языке программирования L1. Выход компилятора (объектная программа)также представляет собой цепочку символов, но принадлежащую другому языку L2, например, языку некоторого компьютера. При этом сам компилятор написан на языке L3, возможно, отличающемся от первых двух.

Обозначим язык L1 исходным языком, язык L2 – целевым языком, а язык L3 – языком реализации. Таким образом, можно говорить о компиляторе как об отображении множества L1 в множество L2, т.е. [pic].2 Лексический анализ

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

Токен представляет собой пару,состоящую из имени токена и необязательного атрибута. Имя токена – это абстрактный символ, представляющий тип лексической единицы, например конкретное ключевое слово или последовательность входных символов, составляющую идентификатор. Имена токенов являются входными символами, обрабатываемыми синтаксическим анализатором. Код класса токен представлен в Приложении Б.

Шаблон – это описание вида, которыйможет принимать лексема токена. В случае ключевого слова шаблон представляет собой просто последовательность символов, образующих это ключевое слово. Для идентификаторов и некоторых других токенов шаблон представляет собой более сложную структуру, которой соответствуют многие строки.

Лексема представляет собой последовательность символов исходной программы, которая соответствует шаблону токена иидентифицируется лексическим анализатором как экземпляр токена.

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

[pic]

Рис. 2.1 – Взаимодействие лексического анализатора с синтаксическим

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