4IFS2-COMP-PLD/compiler/CodeGenVisitor.h
2026-03-04 11:56:25 +01:00

35 lines
1.1 KiB
C++

#pragma once
#include <vector>
#include <string>
#include "antlr4-runtime.h"
#include "SymbolTable.h"
#include "generated/ifccBaseVisitor.h"
class CodeGenVisitor : public ifccBaseVisitor {
SymbolTable *symbolTable; // shared, not owned
std::vector<std::string> scopeStack; // navigation state, owned by this visitor
int stackOffset = 0; // When adding additional information to the stack such as temp expressions results, sp gets decremented and this offset keeps track of how much
std::string currentScope() const { return scopeStack.back(); }
public:
explicit CodeGenVisitor(SymbolTable *st) : symbolTable(st) {
}
std::any visitProg(ifccParser::ProgContext *ctx) override;
std::any visitStmt(ifccParser::StmtContext *ctx) override;
std::any visitReturn_stmt(ifccParser::Return_stmtContext *ctx) override;
std::any visitDecl_stmt(ifccParser::Decl_stmtContext *ctx) override;
std::any visitSet_stmt(ifccParser::Set_stmtContext *ctx) override;
std::any visitVal(ifccParser::ValContext *ctx) override;
std::any visitExpr(ifccParser::ExprContext *ctx) override;
};