Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бАКАЛАВР_РАБОТА.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.13 Mб
Скачать

Файл 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