public void TestString() { // Arrange var lhsIdentifierToken = new Token(Token.IDENT, "myVar"); var rhsIdentifierToken = new Token(Token.IDENT, "anotherVar"); var letToken = new Token(Token.LET, "let"); var letStatement = new LetStatement(letToken) { Name = new Identifier(lhsIdentifierToken), Value = new Identifier(rhsIdentifierToken) }; var program = new ProgramRoot(); program.Statements.Add(letStatement); // Act var programString = program.String(); // Assert var expected = "let myVar = anotherVar;"; Assert.AreEqual(expected, programString); }
public static string ProgramFunction(ProgramRoot program) { var s = ".class public auto ansi beforefieldinit Program extends [mscorlib]System.Object\n{\n"; for (var i = 0; i < program.RoutineDeclarations.Count; i++) { s += MainFunction(program.RoutineDeclarations[i], program.RoutineDeclarations[i].Identifier, program.RoutineDeclarations[i].Parameters.ParameterDeclarations); } s += " .method public hidebysig specialname rtspecialname instance void\n .ctor() cil managed\n {\n .maxstack 8\n ldarg.0\n call instance void [mscorlib]System.Object::.ctor()\n nop\n ret\n }\n}"; return(s); }
public ProgramRoot ParseProgram() { var program = new ProgramRoot(); while (curToken.Type != Token.EOF) { var statement = ParseStatement(); if (statement != null) { program.Statements.Add(statement); } NextToken(); } return(program); }
public void run(ProgramRoot p) { dict = new Dictionary <string, int>(); var s = ProgramFunction(p); using (var writer = new StreamWriter(File.OpenWrite("out.il"))) { if (errors == false) { writer.WriteLine(s); } else { writer.WriteLine("Error"); } } }