//Mark Klara //mak241@pitt.edu //CS 1622 - Project 3 //CodeGenerator.java package codegen; import java.io.*; import IR.*; import helper.Label; import symboltable.*; import java.util.List; import java.util.Hashtable; import regalloc.RegisterAllocator; public class CodeGenerator { private String output; private List IRList; private Hashtable> labels; private RegisterAllocator allocator; private SymbolTable symbolTable; public CodeGenerator(List list, Hashtable> label, RegisterAllocator alloc, Scope symTable, String fileName) { IRList = list; output = fileName; labels = label; allocator = alloc; symbolTable = (SymbolTable)symTable; } //Helper function to get size of a class (in bytes) public int getClassSize(String name) { ClassSymbolTable cst = symbolTable.getClass(name); if(cst == null) { System.err.println("Error - Invalid Class Lookup in CodeGenerator!"); return -1; } return cst.getSize(); } public void generateMIPS() { boolean printedExit = false; //Used to track the closing of main try { FileWriter fw = new FileWriter(output); BufferedWriter bw = new BufferedWriter(fw); bw.write(".text\n", 0, 6); bw.write("main:\n", 0, 6); //Iterate through the IR instructions for(int i = 0; i < IRList.size(); i++) { Quadruple q = IRList.get(i); List