48 lines
1.1 KiB
C++
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;
|
|
}
|