
- •Выпускная квалификационная работа бакалавра
- •Задание на выпускную квалификационную работу бакалавра
- •План-график выполнения работы
- •Реферат
- •Введение
- •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
Файл astCodeGen.H
#ifndef ASTGENCODE_H
#define ASTGENCODE_H
#include "ast/ast.h"
#include "symbolTable/symbolTable.h"
#include "ast/objType.h"
#include <fstream>
#include <typeinfo>
#include "logger/logger.h"
namespace parser_LL1{
using std::ofstream;
class AstCodeGen: public AstVisitor{
ofstream& out;
SymbolTable* table;
int currCount;
std::vector<string> arrNames;
void emitCode(const string& s){
out<<s;
}
string toString(int i){
char buff[11];
sprintf_s(buff,"%d",i);
return string(buff);
}
string toString(double i){
char buff[30];
sprintf_s(buff,"%g",i);
return string(buff);
}
int evalIndex(Expr* expr, int count=0);
public:
AstCodeGen(ofstream& target,SymbolTable* t )
:out(target),table(t)
{
currCount=0;
}
void visit(Program* program);
void visit(Der* der);
void visit(Id* id);
void visit(ConstantInt* constInt);
void visit(ConstantFloat* constFloat);
void visit(Access* access);
void visit(Func* func);
void visit(Ver* ver);
void visit(UnaryMinus* unaryMinus);
void visit(PlusExp* plusExp);
void visit(MinusExp* minusExp);
void visit(MulExp* mulExp);
void visit(DivExp* divExp);
void visit(UnaryNot* unaryNot);
void visit(Or* OR);
void visit(And* AND);
void visit(Ne* ne);
void visit(Eq* eq);
void visit(Le* le);
void visit(Ge* ge);
void visit(Less* less);
void visit(Gr* gr);
void visit(ListExpr* listExpr);
void visit(Seq* seq);
void visit(If* IF);
void visit(EquationIndex* equationIndex);
void visit(Equation* equation);
void visit(SetLocal* setLocal);
void visit(SetLocalIndex* setLocalIndex);
void visit(SetGlobal* setGlobal);
void visit(SetGlobalIndex* setGlobalIndex);
void visit(LocalState* localState);
void visit(DeclConst* declConst);
void visit(DeclMacro* ){}
void visit(DeclArray* );
void visit(DeclCount* ){}
void visit(Declar* ){}
void visit(Stmt* ){}
void visit(Arith* ){}
void visit(Logical* ){}
void visit(Expr* ){}
void visit(Interval* ){}
void visit(Leaf* ){}
~AstCodeGen(){
}
};
}// parser_LL1
#endif // ASTGENCODE_H