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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
 public override List <string> Generate()
 {
     return(new List <string>()
     {
         read_op,
         WMIPS.not("$a0", "$a0"),
         save_res
     });
 }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
 public override List <string> Generate()
 {
     return(new List <string>()
     {
         read_op,
         WMIPS.li("$a1", 1),
         WMIPS.sub("$a0", "$a1", "$a0"),
         save_res
     });
 }
Esempio n. 12
0
        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);
        }
Esempio n. 14
0
        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:");
        }