
- •112 Этапы программирования
- •4 Эксплуатация и распространение программы.
- •113 Особенности составления программ на Ассемблере
- •114 Ассемблирование, компиляция, загрузка программы
- •Синтаксический анализ
- •Семантический анализ
- •115 Основные понятия теории конечных автоматов
- •116 Типы автоматов и способы их задания и функционирования
- •117 Минимизация абстрактных автоматов
- •118 Структурный синтез автоматов
- •119 Типы запоминающих устройств, их назначение и характеристики
- •120 Классификация полупроводниковых зу
- •I Адресные
- •II Последовательные
- •III Ассоциативные
- •121 Основные структуры зу
- •122 Постоянные зу типа rom, prom, eprom, eeprom
- •123 Flash-память
- •124 Память типа Straba Flash
- •125 Статистическая память sram
- •126 Динамические зу dram
- •127 Функциональная организация оперативных и постоянных зу
- •Выход d
- •128 Реализация многокристальной памяти
Синтаксический анализ
На этой стадии компилятор выявляет, из каких лексем – минимальных единиц языка, имеющих смысл для компилятора – состоит текст: выявляются операторы, переменные, вызовы функций и так далее. На этом же этапе происходит удаление так называемого синтаксического сахара – конструкций, не являющихся самостоятельными лексемами, но включёнными в язык для удобства (например, квадратные скобки для обращения к элементам массива). Текст программы при этом преобразуется в промежуточный формат компилятора, который никакими стандартами не регламентируется и зависит от конкретной реализации.
Лексические ошибки
При лексическом анализе выявляются все синтаксические ошибки – участки кода, которые вообще не могут быть распознаны как лексемы. Примером синтаксической ошибки может быть не поставленная в нужном месте точка с запятой. Чаще всего такая ошибка делает бессмысленным только оператор, после которого она была пропущена, и следующий за ним, поэтому синтаксический анализ продолжается дальше, чтобы была возможность сразу сообщить программисту обо всех ошибках, которые присутствуют в тексте. Однако дальнейшей обработке текст не подвергается.
Семантический анализ
Вторым этапом компиляции является семантический анализ – преобразование созданного в ходе синтаксического анализа набора лексем в код на языке ассемблера. Каким образом это будет осуществляться, целиком зависит от языка программирования. Помимо собственно преобразования кода, семантический анализ решает ещё две задачи:
Ошибки в реализации алгоритма
Поиск ошибок в реализации алгоритма, таких как недопустимые преобразования типов, неправильные вызовы функций и прочих.
Распределение регистров
Обращение к регистрам процессора идёт значительно быстрее, чем к оперативной памяти, а потому переменные лучше хранить именно в них. Если переменных меньше, чем регистров, то проблемы нет никакой. Но когда переменных больше, чем регистров, нужно определить, хранение каких именно переменных в регистрах больше всего ускорит работу программы, а какие можно оставить в оперативной памяти. Эта задача и называется распределением регистров.
В целом, результатом компиляции является код на языке ассемблера.
Ассемблирование — процесс трансляции программы с языка ассемблера в машинный код.
После компиляции программа ассемблируется. Результатом ассемблирования является объектный файл. Он содержит информацию в машинном коде, однако запустить его невозможно: как и в коде, создаваемом компилятором, в объектном файле все обращения в функциям записаны как переходы по символьным меткам, а не по адресам, кодов же библиотечных функций объектный файл не содержит вовсе. Тем не менее, он является почти готовой программой, именно объектными файлами являются все библиотеки.
115 Основные понятия теории конечных автоматов
Многополюсный чёрный ящик. Теория конечных автоматов имеет дело с математическими моделями, предназначенными для приближённого отображения физических или абстрактных явлений. В теории конечных автоматов переменные характеризуются следующим образом: 1) Входные переменные - воздействия, генерируемые другой системой на исследуемую систему. 2) Выходные переменные - величины, характеризующие поведение системы и интересующие исследователя. 3) Промежуточные переменные - величины, которые не являются ни входными ни выходными.
Исследуемый объект представляется в виде чёрного ящика.
S- система; xj...xk - входные переменные; zh..zk - выходные переменные; qi...qk- промежуточные переменные.
Дискретность времени. Предполагается, что любая система, представленная моделью конечного автомата, управляется независимым синхронизирующим источником. Все переменные системы S измеряются не непрерывно, а только в дискретные моменты времени. Эти моменты времени задаются синхронизирующими сигналами, их называют тактовыми моментами.
Конечность алфавита. Множество значений, которые принимает переменная x называется алфавитом переменной х и обозначается Х. Элемент алфавита Х называется символом. Аналогично вводятся понятие алфавита для z и q. Х называется входным алфавитом. Z называется выходным алфавитом. Q называется алфавитом промежуточных переменных или состояний. Если переменная х1 принимает конечное количество значений, то ей соответствует алфавит Х1, аналогично х2^Х2 и т.д. Тогда входной алфавит системыХ=Х1*Х2*...Хг. Аналогично задаётся выходной алфавит системы Z.
Определение абстрактного автомата. Термин абстрактного автомата используется в связи с идеализацией дискретного времени, а также потому, что в этой модели абстрагируется от конкретных физических величин и используют только некоторые входные и выходные символы алфавита. Конечным автоматом А называют синхронную систему с конечным выходным алфавитом Х, с конечным выходным алфавитом Y, конечным множеством состояний S и двумя характеристическими функциями.
X; Y; S; yt = fy(xt; S) S+1 = fs(xi Sj)
Характеристическую функцию fy часто обозначают X и называют функцией выходов, а fS обозначают 8 и называют функцией переходов и она определяет состояние автоматов в следующий j+1 момент времени.