PA6 - Decaf x86 Code Generation
Goal
The goal of our semester-long project is to gain experience in compiler implementation by constructing a simple compiler. We will be implementing a compiler for a variant of the well-known Decaf language, which is a simple Java-like procedural programming language.
The goal of this part of the project is to generate x86 assembly code for Decaf programs.
Description
As before, you will need to re-download or modify the main driver. There are no modifications to DecafAST.py for this assignment.
You should augment your DecafCodeGen.py file with a new
generate_x86 function. It should take a TACProgram and
return a string containing x86 assembly. The resulting assembly should adhere to
standard x86 cdecl calling conventions and should compile on the server using
"gcc -O0".
Sample Input
class Program {
void foo() {
bar();
}
void bar() { }
void main() {
foo();
bar();
}
}
Sample Output
.section .bss
.section .data
.section .text
.globl main
foo:
push %rbp
mov %rsp, %rbp
call bar
leave
ret
bar:
push %rbp
mov %rsp, %rbp
leave
ret
main:
push %rbp
mov %rsp, %rbp
call foo
call bar
leave
ret
Submission
DUE: Friday, Apr 17, 2015, at 23:59 (11:59PM) EST
Recommended file names (for Python):
Decaf.g4 (grammar, previous project)
DecafLexer.py (auto-generated using ANTLR4)
DecafParser.py "
DecafListener.py "
DecafCompiler.py (driver, provided above)
DecafAST.py (AST framework, provided above)
DecafASTConverter.py (converter, previous project)
DecafAnalysis.py (analysis routines, previous project)
DecafCodeGen.py (TAC/x86 generation routines)
Submit a zip or tarball with your complete solution on Canvas. Your code must compile and work on the class server. Part of your grade will be based on automated testing and part will be based on style considerations. Please make sure that your project adheres to the specification exactly to avoid difficulties with the automated testing framework, and make sure that your code is clean and documented.