Содержание
Введение
1. Анализ задания
2. Разработка лексического анализатора
2.1 Выбор и обоснование структур данных
2.2 Разработка автоматных грамматик для распознавания лексем
2.3 Разработка автоматов, работающих по правилам грамматики
2.3.1 Автомат для распознавания имён
2.3.2 Автомат для распознавания 16-ричных констант
2.3.3 Автомат для распознавания римских констант
2.3.4 Объединённый автомат
2.4 Разработка алгоритма и программы лексического анализа
2.4.1 Выделение лексем
2.4.2 Распознавание лексем
2.4.3 Реализация лексического анализатора
2.4.4 Тестирование лексического анализатора
3. Разработка синтаксического анализатора
3.1 Уточнение грамматики языка применительно к варианту задания
3.2 Разработка алгоритма синтаксического анализа
3.3 Алгоритмы распознающих функций
3.3.1 Функция Lex_Progr
3.3.2 Функция Lex_Descr_List
3.3.3 Функция Lex_Descr
3.3.4 Функция Lex_Name_List
3.3.5 Функция Lex_Oper_List
3.3.6 Функция Lex_Assign
3.3.7 Функция Lex_Exp
3.3.8 Функция Lex_Simple_Exp
3.3.9 Функция Lex_Term
3.3.10 Функция Lex_mnozh
3.3.12 Функция Lex_Body
3.4 Тексты распознающих процедур
3.5 Результаты тестирования синтаксического анализатора
4. Реализация двухфазного компилятора
4.1 Результаты тестирования двухфазного компилятора
5. Описание программы
5.1 Общие сведения и функциональное назначение
5.2 Вызов и загрузка
5.3 Входные данные
5.4 Выходные данные
5.5 Описание логической структуры программы
5.5.1 Файлы программы
5.5.2 Общее описание работы программы
Список использованной литературы
По классификации программного обеспечения ЭВМ компиляторы относятся к системным обрабатывающим программам. Их функцией является перевод программы с языка высокого уровня в машинный код. В процессе перевода в программе выделяются и изменяются такие уровни или слои как алфавит, лексика, синтаксис при сохранении семантики.
Алфавит - набор допустимых символов и знаков, из которых строятся элементарные конструкции языка. Отдельные знаки объединяются в лексемы.
Лексема - отдельная неделимая конструкция, имеющая смысл.
Слова (лексемы) объединяются в предложения (операторы) согласно правилам синтаксиса.
Синтаксис - описание правильных конструкций языка или правил получения правильных конструкций языка.
Компиляция состоит из этапов анализа и синтеза. В анализ входит лексический, синтаксический и семантический анализ.
Лексический анализ состоит из распознавания лексем, их классификации и определения правильности.
Синтаксический анализ заключается в проверке правильности структур языка, таких как предложения или операторы и всей программы в целом.
Задание можно разделить на 3 части: лексический анализ, синтаксический анализ, разработка компилятора в целом
Лексический анализ включает этапы:
преобразование исходного текста в длинную строку;
выделение лексических единиц (лексем);
распознавание типов лексем;
добавление лексем в соответствующие таблицы;
сохранение таблиц в виде файлов.
В данном задании используются следующие типы лексем:
идентификаторы;
ключевые слова;
16-ричные и римкие константы;
знаки операций;
разделители.
Идентификаторы (имена)
Следует отметить, что идентификатор может начинаться только с буквы, следующие символы могут быть как буквы, так и цифры и знак подчеркивания (‘_’). Кроме того, идентификаторы не могут совпадать со служебными словами.
В данном задании встречаются следующие идентификаторы:
‘var15’, ‘n’. Их следует записать в таблицу идентификаторов.
Ключевые слова
Этот класс лексем, как правило, описывается тем же синтаксисом, что и идентификаторы. Основное отличие состоит в том, что все ключевые слова заранее перечислены и каждое играет в языке свою особую роль. Оно не может заменяться другими ключевыми словами. Лексический анализатор должен отличать ключевые слова от обычных имен, различать между собой и возвращать для каждого из них свои (уникальные) значения.
Лексический анализатор должен различить следующие ключевые слова:
‘program’, ‘var’, ‘integer’, ‘begin’, ‘repeat’, ‘until’, ‘end’, и записать их в таблицу терминальных символов.
Константы.
В данном задании встречаются как 16-ричные, так и римские константы. Необходимо, чтобы лексический анализатор правильно различал константы и различал их тип (16-ричная константа, римская константа) и записывал тип в таблицу констант.
Константа считается римской, если она состоит из знака и символов ‘X’,’V’ и ‘I’ и образована по правилам составления римских констант. Она считается 16-ричной, если начинается с символа ‘$’ и знака и состоит из цифр и букв ‘A’. ’F’. Константы могут быть как положительными, так и отрицательными, это зависит от знака после символа ‘$’.
Лексический анализатор должен различить константы:
‘$+00’, ‘$-0A’ - как 16-ричные;
‘-XII’ - как римскую.
Эти лексемы он должен записать в
Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.