
- •Выпускная квалификационная работа бакалавра
- •Задание на выпускную квалификационную работу бакалавра
- •План-график выполнения работы
- •Реферат
- •Введение
- •1 Языковые процессоры
- •1.1 Практическое применениеискусственных языков
- •1.2 Практический пример
- •1.3 Понятие и структура языкового процессора
- •2Обзор существующих систем и обоснование выбора инструментальных средств и класса грамматики
- •2.1 Обзор существующей символьной спецификации моделей гс в среде исма
- •2.1.1 Лексемы языка исма
- •2.1.2 Грамматика языка исма
- •2.1.3 Семантические действия в языковом процессоре исма
- •2.1.4 Заключение
- •2.2 Обоснование выбора инструментальных средств и класса грамматики
- •3 Постановка задачи исследования
- •3.1 Характеристика задачи исследования
- •3.2 Входная информация
- •3.3 Выходная информация
- •3.4 Архитектура среды исма с расширенным языком описания гс
- •4 Программно-математическое обеспечение
- •4.1Лексический анализатор
- •4.1.1 Функции лексического анализатора
- •4.1.2 Спецификация токенови входного алфавита символов
- •4.1.3 Распознавание токенов
- •4.1.4 Иерархия классов модуля
- •4.2 Синтаксический анализатор
- •4.2.1 Функции синтаксического анализатора
- •4.2.2 Спецификация грамматики
- •4.2.3 Метод разбора
- •4.2.4 Восстановление после ошибок
- •4.2.5 Иерархия классов модуля
- •4.3 Семантический анализ
- •4.3.1 Промежуточное представление программы
- •4.3.2 Грамматика с семантическими правилами
- •4.3.3 Модифицированныйметодразбора
- •4.3.4 Семантический анализ. Таблица символов
- •4.3.5 Семантический анализ. Проверка корректности типа
- •4.4 Генерация кода
- •4.5 Система сбора диагностических сообщений
- •5 Тестирование
- •5.1 Лексический анализатор
- •5.2 Синтаксическийанализатор
- •5.3 Семантический анализатор
- •Заключение
- •Список использованных источников
- •ПриложениеA Диагностические сообщения
- •Диагностические сообщения сканера
- •Диагностические сообщения парсера
- •Диагностические сообщения семантического анализатора
- •ПриложениеБ
- •Б.1.3 Установка системы
- •Б.2 Работа с системой б.2.1 Запуск системы и начало работы
- •Б.2.2Ввод программной модели
- •Б.2.3Трансляция модели и просмотр результата
- •Б.2.4Сохранение программной модели
- •Б.2.6Завершение работы с системой
- •Приложение в
- •Листинг программы
- •В.1 Модуль лексического анализатора
- •Файл abstractLexer.H
- •Файл lexer.H
- •Файл lexer.Cpp
- •В.2 Модуль синтаксического анализатора Файл abstractParser.H
- •Файлparser_ll1.H
- •Файл parser_ll1.Cpp
- •В.3 Модуль семантического анализатора Файл symbolTable.H
- •Файл SymbolTableFactory.H
- •Файл checker.H
- •В.4 Модулькодогенератора ФайлastVisitor.H
- •Файл astCodeGen.H
4.1.3 Распознавание токенов
Анализ регулярных выражений осуществляется конечными детерминированными автоматами.
Регулярное выражение каждого токена можно представить в виде стилизованных блок-схем, именуемых диаграммами переходов. Диаграммы переходов содержит ряд узлов, именуемых состояниями. Каждое состояние представляет ситуацию, которая может возникнуть в процессе сканирования входного потока в поисках лексемы, соответствующей одному из нескольких шаблонов.Дугипредставляют собой направленные линии из одного состояния в другое. Каждая дуга помечена символом или множеством символов. Если мы находимся в некоторомсостоянии sи следующий входной символ – a, мы ищем дугу, исходящую из sи помеченную a. Эти диаграммы являются детерминированными, т.е. имеется не более одной дуги, выходящей из данного состояния с данным символом среди её меток. Различают конечное и стартовое состояния. Диаграмма всегда начинается со стартового(start) состояния и заканчивается в конечномсостоянии(out). Исключением являются ошибочные ситуации, в которых вызывается процедура восстановления после ошибки. Перед конечным состоянием происходит действие – возврат распознанного токена.
На рис. 4.1 приведена диаграмма состояний лексического анализатора, представляющая собой объединение диаграмм переходов для каждого токена в одну общую. Где otherдля состояния bозначает дополнение (отрицание) множестваисходящих дуг изсостоянияb, т.е. other(b)= {входной алфавит}\ {метки дуг исходящих из b}.
Рисунок 4.1 – Диаграммасостояний лексического анализатора
Ошибочные ситуации происходят, когда лексический анализатор не способен продолжать работу, поскольку ни один из шаблонов не соответствует префиксу оставшегося входного потока. Поэтому лексический анализатор выполняет одно из возможных действий по восстановлению после ошибки:
Удаление входного символа из оставшегося входного потока
Вставка пропущенного символа в оставшийся поток
На диаграмме переходов отображены процедуры восстановления после ошибки “error(…)”. В скобках этой процедуры указывается тип восстановления, всего существует пять возможных типов:
inval_NE –некорректный символ “!=”(имя токена -NE ). Возникает при встрече одиночного символа “!”, т.к. он не соответствует ни одному токену, то необходимо сообщить о некорректности входного символа. В качестве действия по восстановлению после ошибки будет удаление этого символа из оставшегося входного потока;
undef_sym – некорректный входной символ. В качестве действия по восстановлению после ошибки будет пропуск этого символаиз оставшегося входного потока;
decim_point – отсутствие цифры после десятичной точки числа. В качестве действия по восстановлению после ошибки будет добавление нуляпосле десятичной точки;
expon – отсутствие цифры после знака показателя степени“E” или “e.В качестве действия по восстановлению после ошибки будет добавление нуляпосле знака “e” или “E”;
inval_suff– некорректный суффикс для чисел, состоящий из букв. В качестве действия по восстановлению после ошибки будет удаление всех букв, идущих после числа в оставшемся входном потоке.
На диаграмме переходов невозможно отобразить способ отличия идентификаторов отзарезервированных слов языка, поэтому опишем его отдельно.
Изначально зарезервированные слова вносятся в таблицу символов.Поле записи в таблице символов указывает, что эти строки не могут быть обычными идентификаторами, и определяет, какие именно токены они представляют. Когда сканер находит идентификатор, то он проверяет, находится ли в таблице символов лексема с таким значением, если запись найдена, то он возвращает указатель на запись. Само собой, никакой идентификатор, который не находится в таблице в момент лексического анализа, не может быть зарезервированным словом, так что его токен –ID.
Верхний предел времени выполнения алгоритмалексемной декомпозициилинейно зависит от длины входной цепочки символов|x|, т.е.выражается какO(|x|).