示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#4
0
        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");
                }
            }
        }