
- •Выпускная квалификационная работа бакалавра
- •Задание на выпускную квалификационную работу бакалавра
- •План-график выполнения работы
- •Реферат
- •Введение
- •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
2.1.3 Семантические действия в языковом процессоре исма
Семантический анализатор языкового процессора ИСМА осуществляет:
– контроль правильности структуры программы;
– контроль дублирования языковых единиц;
– контроль числа и допустимости значений фактических параметров в вызове функций;
– замену имен констант на их численное значение;
– макроподстановку;
– формирование внутреннего представления модели.
2.1.4 Заключение
Из описанных выше характеристик существующего языкового процессора, можно отметить его слабые места:
–использование в качестве метода разбора метод рекурсивного спуска
– отсутствие семантических проверок корректности типа операнда в операторах и операциях языка
2.2 Обоснование выбора инструментальных средств и класса грамматики
В качестве языка программирования был выбранC++ новой версии стандарта языка (ISO/IEC 14882:2011), в котором были добавлены новые языковые конструкции, например, умные указатели, которые упрощают управление памятью. Это избавляет от необходимости использовать сторонние библиотеки, тем самым делает программный код легко переносимым на другие платформы, например Linux для этого необходим только компилятор, поддерживающий новый стандарт.
Этот язык был выбран по следующим причинам.Во-первых, он компилируемый, поэтому программы, написанные на нём, будут иметь преимущество по времени выполнения перед интерпретируемыми языками. Во-вторых,C++поддерживаеттакие парадигмы, как объектно-ориентированное программирование и обобщённое программирование, использование которых увеличивает количество повторно используемого кода, делает программы, более читаемыми и легко модифицируемыми.
Для создания пользовательского графического интерфейса выбрана библиотекаQt. Это кросс-платформенный инструментарий разработки программного обеспечения (ПО)на языке программирования C++.Позволяет запускать написанное с его помощьюПОв большинстве современныхоперационных системпутём простой компиляции программы для каждой ОС без измененияисходного кода. Включает в себя все основныеклассы, которые могут потребоваться при разработкеприкладного программного обеспечения, начиная от элементовграфического интерфейсаи заканчивая классами для работы ссетью,базами данныхиXML. Qt является полностью объектно-ориентированным, легко расширяемым и поддерживающим технику компонентного программирования.Существуют версии библиотеки дляMicrosoft Windows,системклассаUNIXс графической подсистемойX11,iOS,Android,Mac OS X,Microsoft Windows CE,QNX, встраиваемых Linux-систем и платформыS60.
Начиная с версии 4.5, Qt распространяется под свободной лицензией GNUGPL, поэтомубиблиотека имеется в свободном доступе.
Так же важным аспектом является выбор класса грамматики, и соответственно метода разбора, от которого в дальнейшем будет зависетьспособ трансляции. Опираясь на существующую версию, был выбран класс грамматик LL(k) из соображений меньшего числа изменений и возможности заменить старый синтаксическийанализатор в языковом процессореИСМА. В существующей версии синтаксический анализатора был реализован методом рекурсивногоспуска.
Ввиду того, что в расширенной версии языка количество продукций в грамматикеувеличится, был выбран метод не рекурсивного предиктивного синтаксического анализа, основанного на явном использовании стека[2]. Это избавляет от лишних расходов времени на восстановление и сохранение контекста процедуры и от теоретической возможности превысить размер программного стека при глубокой рекурсии. Плюсом так же является, что все продукции будут содержаться в одном месте – в таблице синтаксического анализатора.