Читаем Системное программное обеспечение. Лабораторный практикум полностью

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

Построенный компилятор также выполняет оптимизацию результирующей программы следующими методами:

• свертка объектного кода;

• исключение лишних операций;

• исключение бесполезных арифметических и логических операций;

• модификация операций загрузки значения в регистр с учетом особенностей процессоров типа Intel 80x86.

Это позволяет сократить объем результирующего ассемблерного кода и время выполнения объектного кода, который может быть построен на его основе.

Компилятор выполняет обработку исходной программы за шесть проходов:

1. Лексический анализ исходного текста и построение таблицы лексем.

2. Синтаксический анализ по таблице лексем и построение дерева синтаксического разбора.

3. Построение списка триад по дереву синтаксического разбора.

4. Оптимизация списка триад методом свертки объектного кода.

5. Оптимизация списка триад методом исключения лишних операций.

6. Построение результирующего ассемблерного кода по списку триад.

На каждом проходе компилятора исходными данными являются результаты, полученные при выполнении предыдущего прохода.

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

Построенный компилятор выполняет генерацию объектного кода для логических операций и для операций сравнения как для линейных операций, логические выражения всегда вычисляются полностью – это позволяет оптимизировать логические выражения как линейные участки программы, но не вполне соответствует правилам, принятым в промышленных компиляторах. Кроме того, в построенном компиляторе использованы далеко не все возможности оптимизации объектного кода, ориентированного на язык ассемблера процессоров типа Intel 80x86.

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

Приложение 1

Функция переходов конечного автомата для лабораторной работы № 2

Условные обозначения:

• А– любой алфавитно-цифровой символ;

• А(*) – любой алфавитно-цифровой символ, кроме перечисленных в скобках;

• П – любой незначащий символ (пробел, знак табуляции, перевод строки, возврат каретки);

• Б – любая буква английского алфавита (прописная или строчная) или символ подчеркивания («_»);

• Б(*) – любая буква английского алфавита (прописная или строчная) или символ подчеркивания («_»), кроме перечисленных в скобках;

• Ц – любая цифра от 0 до 9;

• F – функция обработки таблицы лексем, вызываемая при переходе КА из одного состояния в другое; обозначения ее аргументов:

v – переменная, запомненная при работе КА;

d – константа, запомненная при работе КА;

a – текущий входной символ КА.

В остальных случаях аргументом функции F является соответствующая лексема. Конечный автомат:

M(Q,Σ,δ,q0,F):

Q = {H, C, G, V, D, I1, I2, T1, T2, T3, T4, E1, E2, E3, E4, O1, O2, X1, X2, X3, A1, A2, A3, F}

Σ = А (все допустимые алфавитно-цифровые символы); q0 = H; F = {F}.

В таблице П1.1. указаны значения функции переходов δ.

Таблица П1.1. Функция переходов δ


При описании функции переходов через разделитель «|» указаны вызовы функции F, необходимые при выполнении того или иного перехода (если они есть).

Приложение 2

Функция переходов конечного автомата для курсовой работы

Условные обозначения:

• А – любой алфавитно-цифровой символ;

• А(*) – любой алфавитно-цифровой символ, кроме перечисленных в скобках;

• П – любой незначащий символ (пробел, знак табуляции, перевод строки, возврат каретки);

• Б – любая буква английского алфавита (прописная или строчная) или символ подчеркивания («_»);

• Б(*) – любая буква английского алфавита (прописная или строчная) или символ подчеркивания («_»), кроме перечисленных в скобках;

• Ц– любая цифра от 0 до 9;

• F – функция обработки таблицы лексем, вызываемая при переходе КА из одного состояния в другое, обозначения ее аргументов:

v – переменная, запомненная при работе КА;

d – константа, запомненная при работе КА;

a – текущий входной символ КА.

Перейти на страницу:

Похожие книги

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

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

Дэниэл Дж. Пак , Стивен Ф. Барретт

Программирование, программы, базы данных / Компьютерное «железо» / Программирование / Книги по IT
Секреты приложений Google
Секреты приложений Google

Даже продвинутые пользователи Интернета не подозревают о тех огромных возможностях, которые предоставляют сервисы Google. Автор рассказывает о таких «секретах» сервисов, которые просто немедленно хочется использовать! Создавать сайты и презентации, бродить по улочкам Парижа, изучать звездное небо – все это доступно каждому, кто сидит у экрана монитора и имеет доступ в Интернет. Книга научит вас работать с веб-приложениями и тысячекратно увеличить свои возможности с помощью новейших технологий. Она написана легким, доступным языком и не требует от читателя наличия каких-либо специальных знаний. Книга содержит множество примеров, иллюстраций и будет полезна всем, кто не стоит на месте и стремится сделать свою жизнь более насыщенной и интересной.

Денис Балуев , Денис Игоревич Балуев

Программирование, программы, базы данных / Интернет / Программное обеспечение / Книги по IT