Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
112-128.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
193.02 Кб
Скачать

Синтаксический анализ

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

Лексические ошибки

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

Семантический анализ

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

Ошибки в реализации алгоритма

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

Распределение регистров

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

В целом, результатом компиляции является код на языке ассемблера.

Ассемблирование — процесс трансляции программы с языка ассемблера в машинный код.

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

115 Основные понятия теории конечных автоматов

Многополюсный чёрный ящик. Теория конечных автоматов имеет дело с мате­матическими моделями, предназначенными для приближённого отображения физиче­ских или абстрактных явлений. В теории конечных автоматов переменные характеризуются следующим образом: 1) Входные переменные - воздействия, генерируемые другой сис­темой на исследуемую систему. 2) Выходные переменные - величины, характеризую­щие поведение системы и интересующие исследователя. 3) Промежуточные перемен­ные - величины, которые не являются ни входными ни выходными.

Исследуемый объект представляется в виде чёрного ящика.

S- система; xj...xk - входные переменные; zh..zk - выходные переменные; qi...qk- промежуточные переменные.

Дискретность времени. Предполагается, что любая система, представленная моде­лью конечного автомата, управляется независимым синхронизирующим источником. Все переменные системы S измеряются не непрерывно, а только в дискретные моменты времени. Эти моменты времени задаются синхронизирующими сигналами, их называют тактовыми моментами.

Конечность алфавита. Множество значений, которые принимает переменная x на­зывается алфавитом переменной х и обозначается Х. Элемент алфавита Х называется символом. Аналогично вводятся понятие алфавита для z и q. Х называется входным ал­фавитом. Z называется выходным алфавитом. Q называется алфавитом промежуточных переменных или состояний. Если переменная х1 принимает конечное количество значе­ний, то ей соответствует алфавит Х1, аналогично х22 и т.д. Тогда входной алфавит системыХ=Х12*...Хг. Аналогично задаётся выходной алфавит системы Z.

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

X; Y; S; yt = fy(xt; S) S+1 = fs(xi Sj)

Характеристическую функцию fy часто обозначают X и называют функцией выхо­дов, а fS обозначают 8 и называют функцией переходов и она определяет состояние ав­томатов в следующий j+1 момент времени.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]