diff --git a/compiler/CodeGenVisitor.cpp b/compiler/CodeGenVisitor.cpp index 31c0894..b6f4bf7 100644 --- a/compiler/CodeGenVisitor.cpp +++ b/compiler/CodeGenVisitor.cpp @@ -1,31 +1,46 @@ #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" ; + std::cout << ".globl _main\n" ; + std::cout << " _main: \n" ; #else - std::cout<< ".globl main\n" ; - std::cout<< " main: \n" ; + std::cout << ".globl main\n" ; + std::cout << " main: \n" ; #endif - this->visit( ctx->return_stmt() ); + this->visitChildren(ctx); std::cout << " ret\n"; - return 0; } antlrcpp::Any CodeGenVisitor::visitReturn_stmt(ifccParser::Return_stmtContext *ctx) { - int retval = stoi(ctx->CONST()->getText()); + int retval = stoi(ctx->val()->getText()); #ifdef __APPLE__ - std::cout << " mov w0, #"< skip ; DIRECTIVE : '#' .*? '\n' -> skip ; -WS : [ \t\r\n] -> channel(HIDDEN); +WS : [ \t\r\n] -> channel(HIDDEN) ; diff --git a/prog/Makefile b/prog/Makefile new file mode 100644 index 0000000..2cd5efb --- /dev/null +++ b/prog/Makefile @@ -0,0 +1,11 @@ +gcc: gcca main-gcc.asm + gcc -o main-gcc.o main-gcc.asm +gcca: main.c + gcc -S -o main-gcc.asm main.c + +ifcc: ifcca main-ifcc.asm + gcc -o main-ifcc.o main-ifcc.asm +ifcca: main.c comp-ifcc + ../compiler/ifcc main.c > main-ifcc.asm +comp-ifcc: + cd ../compiler && make diff --git a/prog/main.c b/prog/main.c new file mode 100644 index 0000000..c0e169b --- /dev/null +++ b/prog/main.c @@ -0,0 +1,5 @@ +int main() { + int x; + x=42; + return x; +}