public override List <string> Generate() { return(new List <string>() { WMIPS.j(Label.LFull) }); }
public override List <string> Generate() { return(new List <string>() { WMIPS.lw("$a0", (-Condition * 4).ToString(), "$sp"), WMIPS.beqz("$a0", Label.LFull) }); }
public override List <string> Generate() { return(new List <string>() { WMIPS.lw("$v0", (-RetVar * 4).ToString(), "$sp"), WMIPS.jr("$ra") }); }
public override List <string> Generate() { var lines = new List <string>(); lines.Add(WMIPS.lw("$a0", (-R * 4).ToString(), "$sp")); lines.Add(WMIPS.sw("$a0", (-L * 4).ToString(), "$sp")); return(lines); }
public override List <string> Generate() { return(new List <string>() { WMIPS.lw("$a0", (-Variable * 4).ToString(), "$sp"), WMIPS.sw("$a0", (-(size + pcount) * 4).ToString(), "$sp") }); }
public override List <string> Generate() { var lines = new List <string>() { WMIPS.sw("$zero", (-Var * 4).ToString(), "$sp") }; return(lines); }
public override List <string> Generate() { var lines = new List <string>(); lines.Add(WMIPS.la("$a0", R.LFull)); lines.Add(WMIPS.lw("$a1", (-4 * L).ToString(), "$sp")); lines.Add(WMIPS.sw("$a0", (Offset * 4).ToString(), "$a1")); return(lines); }
public override List <string> Generate() { var lines = new List <string>(); lines.Add(WMIPS.NEWLINE); lines.Add(LFull + ":"); lines.Add(WMIPS.li("$t9", 0)); return(lines); }
public override List <string> Generate() { return(new List <string>() { read_op, WMIPS.not("$a0", "$a0"), save_res }); }
public override List <string> Generate() { var lines = new List <string>(); lines.Add(WMIPS.li("$v0", 9)); lines.Add(WMIPS.li("$a0", 4 * Size)); lines.Add(WMIPS.SYSCALL); lines.Add(WMIPS.sw("$v0", (-4 * Var).ToString(), "$sp")); return(lines); }
public override List <string> Generate() { return(new List <string>() { read_op, WMIPS.li("$a1", 1), WMIPS.sub("$a0", "$a1", "$a0"), save_res }); }
public override List <string> Generate() { var lines = new List <string>() { read_op1, read_op2 }; switch (_operator) { case "+": lines.Add(WMIPS.add("$a0", "$a0", "$a1")); break; case "-": lines.Add(WMIPS.sub("$a0", "$a0", "$a1")); break; case "*": lines.Add(WMIPS.mult("$a0", "$a1")); lines.Add(WMIPS.mflo("$a0")); break; case "/": lines.Add(WMIPS.div("$a0", "$a1")); lines.Add(WMIPS.mflo("$a0")); break; case "<": lines.Add(WMIPS.sge("$a0", "$a0", "$a1")); lines.Add(WMIPS.li("$a1", 1)); lines.Add(WMIPS.sub("$a0", "$a1", "$a0")); break; case "<=": lines.Add(WMIPS.sle("$a0", "$a0", "$a1")); break; case "=": lines.Add(WMIPS.seq("$a0", "$a0", "$a1")); break; case "=:=": break; case "inherit": lines.Add(WMIPS.move("$v1", "$ra")); lines.Add(WMIPS.jal("_inherit")); lines.Add(WMIPS.move("$ra", "$v1")); lines.Add(WMIPS.move("$a0", "$v0")); break; } lines.Add(save_res); return(lines); }
public override List <string> Generate() { var lines = new List <string>(); lines.Add(WMIPS.sw("$ra", (-4 * size).ToString(), "$sp")); lines.Add(WMIPS.addiu("$sp", "$sp", -4 * (size + 1))); lines.Add(WMIPS.jal(Name.LFull)); lines.Add(WMIPS.addiu("$sp", "$sp", 4 * (size + 1))); lines.Add(WMIPS.lw("$ra", (-4 * size).ToString(), "$sp")); if (OutResult >= 0) { lines.Add(WMIPS.sw("$v0", (-4 * OutResult).ToString(), "$sp")); } return(lines); }
static void Main(string[] args) { if (args.Length != 2) { throw new ArgumentException("Invalid params count"); } Console.WriteLine("Cool Compiler"); var input = args[0]; var output = args[1]; //var input = "C:\\Users\\Kike-PC\\Desktop\\CoolCompiler\\TestCases\\CodeGeneration\\hello_world.cl"; //var output = "C:\\Users\\Kike-PC\\Desktop\\CoolCompiler\\TestCases\\CodeGeneration\\hello.s"; DirectoryInfo dirInfo = new DirectoryInfo(input); //FileInfo files = dirInfo.GetFiles(); FileInfo file = new FileInfo(input); ASTNode root = ParseInput(file.FullName); Scope scope = new Scope(); List <SemanticError> errors = new List <SemanticError>(); ProgramNode rootProgram = root as ProgramNode; SemanticCheck.CheckAST(rootProgram, errors, scope); if (errors.Count > 0) { foreach (SemanticError error in errors) { Console.WriteLine(error.Type); Console.WriteLine(error.Line + ":" + error.Column); } } else { var bc = new BuildICCode(rootProgram, scope); var s = WMIPS.Generate(bc.GetIntCode()); File.WriteAllText(output, s); } Console.WriteLine("Finished:"); }