33 lines
666 B
C++
33 lines
666 B
C++
#include "CodeGenVisitor.h"
|
|
|
|
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->visit( ctx->return_stmt() );
|
|
|
|
std::cout << " ret\n";
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
antlrcpp::Any CodeGenVisitor::visitReturn_stmt(ifccParser::Return_stmtContext *ctx)
|
|
{
|
|
int retval = stoi(ctx->CONST()->getText());
|
|
|
|
#ifdef __APPLE__
|
|
std::cout << " mov w0, #"<<retval<<"\n" ;
|
|
#else
|
|
std::cout << " movl $"<<retval<<", %eax\n" ;
|
|
#endif
|
|
|
|
return 0;
|
|
}
|