- идентификаторы;
- служебные (ключевые) слова;
- разделители;
- константы.
Все они присутствуют в данной программной модели.
Могут вводиться и другие классы. Это обусловлено в первую очередь той ролью, которую играют различные виды слов при написании исходной программы и, соответственно, при переводе ее в машинную программу. При этом наиболее предпочтительным является разбиение всего множества слов, допускаемого в языке программирования, на такие классы, которые бы не пересекались между собой. В этом случае лексический анализ можно выполнить более эффективно. В общем случае все выделяемые классы являются либо конечными (ключевые слова, разделители и др.) — классы фиксированных для данного языка программирования слов, либо бесконечными или очень большими (идентификаторы, константы, метки) — классы переменных для данного языка программирования слов.
С этих позиций коды образов лексем (дескрипторов) из конечных классов всегда одни и те же в различных программах для данного компилятора. Коды же образов лексем из бесконечных классов различны для разных программ и формируются каждый раз на этапе лексического анализа.
В ходе лексического анализа значения лексем из бесконечных классов помещаются в таблицы соответствующих классов. Конечность таблиц объясняет ограничения, существующие в языках программирования на длины (и соответственно число) используемых в программе идентификаторов и констант. Необходимо отметить, что числовые константы перед помещением их в таблицу могут переводиться из внешнего символьного во внутреннее машинное представление. Содержимое таблиц, в особенности таблицы идентификаторов, в дальнейшем пополняется на этапе семантического анализа исходной программы и используется на этапе генерации объектной программы.
Первоначально в тексте исходной программы лексический анализатор выделяет последовательность символов, которая по его предположению должна быть словом в программе, т.е. лексемой. Может выделяться не вся последовательность, а только один символ, который считается началом лексемы. Это наиболее ответственная часть работы лексического анализатора. Пользователю необходимо учитывать, что метка (если она присутствует) начинается сначала строки (пробелы – если они есть – во внимание не принимаются), и от операций отделяется символом “:”
Пример:
М: moveq #123,D1;
add D1,D2;
причём количество пробелов “:”до, после “:”, между операндами, между командой и операндами (и их наличие) может быть произвольным. Обязательной является “,” между приёмником и источником. В конце мнемоники команды в обязательном порядке должна стоять “;”, которая отделяет мнемокод от комментариев пользователя, которые интерпретатором игнорируются. В противном случае произойдёт выработка исключительной ситуации, о чём появится на экран соответствующее сообщение.
После этого проводится идентификация лексемы. Она заключается в сборке лексемы из символов, начиная с выделенного на предыдущем этапе, и проверки правильности записи лексемы данного класса.
Идентификация лексемы из конечного класса выполняется путем сравнения ее с эталонным значением. Основная проблема здесь — минимизация времени поиска эталона. В общем случае может понадобиться полный перебор слов данного класса, в особенности для случая, когда выделенное для опознания слово содержит ошибку. Уменьшить время поиска можно, используя различные методы ускоренного поиска:
- метод линейного списка;
- метод упорядоченного списка;
- метод расстановки и другие.
Для идентификации лексем из бесконечных (очень больших) классов используются специальные методы сборки лексем с одновременной проверкой правильности написания лексемы. При построении этих алгоритмов широко применяется формальный математический аппарат — теория регулярных языков, грамматик и конечных распознавателей. В данном случае – время поиска не актуально, так как оно и так не высоко из-за не очень большого количества команд микропроцессора.
При успешной идентификации значение лексемы из бесконечного класса помещается в таблицу идентификации лексем данного класса. При этом необходимо предварительно проверить: не хранится ли там уже значение данной лексемы, т.е. необходимо проводить просмотр элементов таблицы. Если ее там нет, то значение помещается в таблицу. При этом таблица должна допускать расширение. Опять же для уменьшения времени доступа к элементам таблицы она должна быть специальным образом организована, при этом должны использоваться специальные методы ускоренного поиска элементов.
После проведения успешной идентификации лексемы формируется ее образ — дескриптор, он помещается в выходной поток лексического анализатора. В случае неуспешной идентификации формируются сообщения об ошибках в написании слов программы.
В ходе лексического анализа осуществляются и другие виды лексического контроля, в частности, проверяется парность скобок, допустимость и правильность записи способов адресации.
Выходной поток с лексического анализатора в дальнейшем поступает на вход синтаксического анализатора. Имеется две возможности их связи:
- раздельная связь, при которой выход лексического анализатора формируется полностью и затем передается синтаксическому анализатору;
- нераздельная связь, когда синтаксическому анализатору требуется очередной образ лексемы, он вызывает лексический анализатор, который генерирует требуемый дескриптор и возвращает управление синтаксическому анализатору.
Второй вариант характерен для однопроходных трансляторов, который и реализуется в данной модели. Таким образом, процесс лексического анализа может быть достаточно простым, но в смысле времени компиляции оказывается довольно долгим. Больше половины времени, затрачиваемого компилятором на компиляцию, приходится на этап лексического анализа. Несмотря на это, данный способ позволяет успешно решать задачи, поставленные пользователем перед программой.
Целью данной работы являлось изучение организации 32-разрядного микропроцессора фирмы Motorola. Данная цель была достигнута посредством написания программной модели данного микропроцессора.
В ходе работы большое внимание уделено функциональным особенностям объекта разработки, способам организации, системе команд, представлению исходных данных в различных системах исчисления. Данное программное изделие может быть использовано при обучении студентов. Наглядный интерфейс, простота в работе, широкие возможности позволяют лучше понять структуру микропроцессора. Объектно – ориентированные методы написания программной модели позволяют в дальнейшем усовершенствовать её структуру, превратив тем самым программную модель микропроцессора в программную модель микро ЭВМ.
Список использованных источников
1. Internet. Сайты, посвящённые микроэлектронике, в частности www.Gaw.ru, раздел посвящённый микропроцессорам.
2. Жмакин А.П. Курс лекций по микропроцессорам.
3. Фаронов В.В. Delphi 5. Учебный курс, М., “Knowledge”, 2001 год.
4 Юров. В. Assembler., Санкт-Петербург: Питер” 2000 г.
5. Фаронов В. В. Delphi 5. Учебный курс.-М.: «Нолидж», 2001. –608 с., ил.
6. Архангельский А. Я. Программирование в Delphi 4 – М.: ЗАО “Издательство БИНОМ”, 1999 г. – 768 с., ил.
7. Дантеман Джефф, Мишел Джим, Тейлор Дон. Программирование в среде Delphi: Пер с англ. / Дантеманн Джефф, Тейлор Джон. – К.:НИПФ “ДиаСофтЛтд.”, 1995. – 608 с.
8. Фёдоров А. Г. Создание Windows – приложений в среде Delphi: - М.: ТОО фирма “КомпьютерПресс”, 1995. – 287 с., с ил.
9. Проектирование аппаратных и программных средств переработки информации./ Методические указания для выполнения работы бакалавра. – КГТУ. Курск.
10. Лишнер Р. Секреты Delphi 2: Пер. с англ. – Киев НИФП “ДиаСофтЛтд”, 1996. – 800 с.