
- •Выпускная квалификационная работа бакалавра
- •Задание на выпускную квалификационную работу бакалавра
- •План-график выполнения работы
- •Реферат
- •Введение
- •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
Файл checker.H
#ifndef CHECKER_H
#define CHECKER_H
#include "ast/ast.h"
#include "symbolTable/symbolTable.h"
#include "ast/objType.h"
#include <typeinfo>
namespace parser_LL1{
class SymbolTable;
class Checker{
private:
SymbolTable* table;
public:
Checker(SymbolTable* t){
this->table=t;
}
void check(Node* program);
protected:
void checkSetGlobalIndex(SetGlobalIndex* sgi);
void checkEquationIndex(EquationIndex* eq);
void checkEquation(Equation* eq);
void checkSetLocal(SetLocal* sl);
void checkSetLocalIndex(SetLocalIndex* sli);
void checkIf(If* i);
void checkLocalState(LocalState* ls);
////////////////////////////////////////////////////
void checkVer(Ver* v);
void checkExpr(Expr* expr);
void checkBool(Expr* expr,string& count);
void checkExprIndex(Expr* expr, string& count);
void checkIndex(Expr* expr, string& count);
void replaceArg(Expr* expr,const string& arg,Expr* param);
};
}
#endif // CHECKER_H
В.4 Модулькодогенератора ФайлastVisitor.H
#ifndef ATSVISITOR_H
#define ATSVISITOR_H
namespace parser_LL1{
class Program;
class Expr;
class Interval;
class Leaf;
class Der;
class Id;
class ConstantInt;
class ConstantFloat;
class Access;
class Func;
class Macro;
class Ver;
class Arith;
class UnaryMinus;
class PlusExp;
class MinusExp;
class MulExp;
class DivExp;
class Logical;
class UnaryNot;
class Or;
class And;
class Ne;
class Eq;
class Le;
class Ge;
class Less;
class Gr;
class ListExpr;
class Stmt;
class Seq;
class If;
class EquationIndex;
class Equation;
class SetLocal;
class SetLocalIndex;
class SetGlobal;
class SetGlobalIndex;
class LocalState;
class Declar;
class DeclConst;
class DeclMacro;
class DeclArray;
class DeclCount;
class AstVisitor
{
public:
virtual void visit(Program*)=0;
virtual void visit(Expr*)=0;
virtual void visit(Interval*)=0;
virtual void visit(Leaf*)=0;
virtual void visit(Der*)=0;
virtual void visit(Id*)=0;
virtual void visit(ConstantInt*)=0;
virtual void visit(ConstantFloat*)=0;
virtual void visit(Access*)=0;
virtual void visit(Func*)=0;
virtual void visit(Ver*)=0;
virtual void visit(Arith*)=0;
virtual void visit(UnaryMinus*)=0;
virtual void visit(PlusExp*)=0;
virtual void visit(MinusExp*)=0;
virtual void visit(MulExp*)=0;
virtual void visit(DivExp*)=0;
virtual void visit(Logical*)=0;
virtual void visit(UnaryNot*)=0;
virtual void visit(Or*)=0;
virtual void visit(And*)=0;
virtual void visit(Ne*)=0;
virtual void visit(Eq*)=0;
virtual void visit(Le*)=0;
virtual void visit(Ge*)=0;
virtual void visit(Less*)=0;
virtual void visit(Gr*)=0;
virtual void visit(ListExpr*)=0;
virtual void visit(Stmt*)=0;
virtual void visit(Seq*)=0;
virtual void visit(If*)=0;
virtual void visit(EquationIndex*)=0;
virtual void visit(Equation*)=0;
virtual void visit(SetLocal*)=0;
virtual void visit(SetLocalIndex*)=0;
virtual void visit(SetGlobal*)=0;
virtual void visit(SetGlobalIndex*)=0;
virtual void visit(LocalState*)=0;
virtual void visit(Declar*)=0;
virtual void visit(DeclConst*)=0;
virtual void visit(DeclMacro*)=0;
virtual void visit(DeclArray*)=0;
virtual void visit(DeclCount*)=0;
virtual ~AstVisitor(){}
};
}
#endif // ATSVISITOR_H