4IFS2-COMP-PLD/compiler/CodeGenVisitor.cpp
2026-03-02 16:55:58 +01:00

48 lines
1.1 KiB
C++

#include "CodeGenVisitor.h"
#include "generated/ifccParser.h"
antlrcpp::Any CodeGenVisitor::visitStmt(ifccParser::StmtContext *ctx) {
return this->visitChildren(ctx);
}
antlrcpp::Any CodeGenVisitor::visitDecl_stmt(ifccParser::Decl_stmtContext *ctx) {
return 0;
}
antlrcpp::Any CodeGenVisitor::visitSet_stmt(ifccParser::Set_stmtContext *ctx) {
return 0;
}
antlrcpp::Any CodeGenVisitor::visitVal(ifccParser::ValContext *ctx) {
// TODO: return either the const or the variable value from the symbol table
return 0;
}
antlrcpp::Any CodeGenVisitor::visitProg(ifccParser::ProgContext *ctx)
{
#ifdef __APPLE__
std::cout << ".globl _main\n" ;
std::cout << " _main: \n" ;
#else
std::cout << ".globl main\n" ;
std::cout << " main: \n" ;
#endif
this->visitChildren(ctx);
std::cout << " ret\n";
return 0;
}
antlrcpp::Any CodeGenVisitor::visitReturn_stmt(ifccParser::Return_stmtContext *ctx)
{
int retval = stoi(ctx->val()->getText());
#ifdef __APPLE__
std::cout << " mov w0, #" << retval << "\n" ;
#else
std::cout << " movl $" << retval << ", %eax\n" ;
#endif
return 0;
}