コード例 #1
0
        static void Test3()
        {
            Compiler      c     = new Compiler();
            List <string> lVars = new List <string>();

            lVars.Add("var int x;");
            lVars.Add("var int y;");
            lVars.Add("var int z;");
            List <VarDeclaration> vars = c.ParseVarDeclarations(lVars);

            string       s          = "let x = ((x + 5) + (y - z));";
            List <Token> lTokens    = c.Tokenize(s, 0);
            LetStatement assignment = c.ParseStatement(lTokens);

            List <LetStatement> lSimple   = c.SimplifyExpressions(assignment, vars);
            List <string>       lAssembly = c.GenerateCode(lSimple, vars);

            CPUEmulator cpu = new CPUEmulator();

            InitLCL(lAssembly);
            cpu.Code = lAssembly;
            cpu.Run(1000, false);
            if (cpu.M[20] != 5)
            {
                Console.WriteLine("BUGBUG");
            }
        }
コード例 #2
0
        static void Test2()
        {
            Console.WriteLine("test2");
            Compiler      c       = new Compiler();
            string        s       = "let x = (+ (+ x 5) (- y z));";
            Stack <Token> sTokens = c.Tokenize(s);

            string[] aTokens = new string[] { "let", "x", "=", "(", "+", "(", "+", "x", "5", ")", "(", "-", "y", "z", ")", ")", ";" };
            for (int i = 0; i < aTokens.Length; i++)
            {
                Token sToken = sTokens.Pop();
                if (sToken.ToString() != aTokens[i])
                {
                    Console.WriteLine("BUGBUG");
                }
            }
            sTokens = c.Tokenize(s);
            AssignmentStatement assignment = c.Parse(sTokens);

            if (assignment.ToString() != s)
            {
                Console.WriteLine("BUGBUG");
            }
            List <AssignmentStatement> lSimple = c.SimplifyExpressions(assignment);

            string[] aSimple = new string[] { "let _3 = (+ x 5);", "let _4 = (- y z);", "let x = (+ _3 _4);" };
            for (int i = 0; i < aSimple.Length; i++)
            {
                if (lSimple[i].ToString() != aSimple[i])
                {
                    Console.WriteLine("BUGBUG");
                }
            }
            c.Compile(s);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: orelkakon/SimpleComiler
        static void Test4()
        {
            Compiler c = new Compiler();

            List <string> lVars = new List <string>();

            lVars.Add("var int x;");
            lVars.Add("var int y;");
            lVars.Add("var int z;");
            List <VarDeclaration> vars = c.ParseVarDeclarations(lVars);

            List <string> lAssignments = new List <string>();

            lAssignments.Add("let x = (+ (- 53 12) (- 467 3));");
            lAssignments.Add("let y = 3;");
            lAssignments.Add("let z = (+ (- x 12) (+ y 3));");

            List <LetStatement>      ls      = c.ParseAssignments(lAssignments);
            Dictionary <string, int> dValues = new Dictionary <string, int>();

            dValues["x"] = 0;
            dValues["y"] = 0;
            dValues["z"] = 0;

            CPUEmulator cpu = new CPUEmulator();

            cpu.Compute(ls, dValues);

            List <LetStatement> lSimple = c.SimplifyExpressions(ls, vars);

            Dictionary <string, int> dValues2 = new Dictionary <string, int>();

            dValues2["x"] = 0;
            dValues2["y"] = 0;
            dValues2["z"] = 0;

            cpu.Compute(lSimple, dValues2);

            foreach (string sKey in dValues.Keys)
            {
                if (dValues[sKey] != dValues2[sKey])
                {
                    Console.WriteLine("BGUBGU");
                }
            }

            List <string> lAssembly = c.GenerateCode(lSimple, vars);

            InitLCL(lAssembly);
            cpu.Code = lAssembly;
            cpu.Run(1000, false);
            if (cpu.M[20] != dValues2["x"])
            {
                Console.WriteLine("BGUBGU");
            }
        }
コード例 #4
0
        static void Test1()
        {
            Console.WriteLine("test1");
            Compiler      c       = new Compiler();
            string        s       = "let x = 5;";
            Stack <Token> sTokens = c.Tokenize(s);

            string[]     aTokens = new string[] { "let", "x", "=", "5", ";" };
            List <Token> answer  = new List <Token>();

            for (int i = 0; i < aTokens.Length; i++)
            {
                Token sToken = sTokens.Pop();
                answer.Add(sToken);
                bool print = false;
                if (sToken.ToString() != aTokens[i])
                {
                    print = true;
                }
                if (print)
                {
                    Console.WriteLine("tokens should be: " + aTokens + " but your answer is: " + answer);
                }
            }
            sTokens = c.Tokenize(s);
            AssignmentStatement assignment = c.Parse(sTokens);

            if (assignment.ToString() != s)
            {
                Console.WriteLine("BUGBUG");
            }

            List <AssignmentStatement> lSimple = c.SimplifyExpressions(assignment);

            if (lSimple.Count != 1 || lSimple[0].ToString() != assignment.ToString())
            {
                Console.WriteLine("BUGBUG");
            }

            //List<string> lAssembly = c.GenerateCode(lSimple);
            c.Compile(s);
        }
コード例 #5
0
        static void TestSimplifyLetStatement()
        {
            List <VarDeclaration> varDecs = new List <VarDeclaration>();

            char chr = 'a';

            while (chr <= 'g')
            {
                VarDeclaration varDec = new VarDeclaration(null, "" + chr);
                varDecs.Add(varDec);
                chr++;
            }
            VarDeclaration x = new VarDeclaration(null, "x");

            varDecs.Add(x);
            string strExpression = "(((a + b) - (c - d)) + (e - (f + g)))";

            Compiler     c          = new Compiler();
            List <Token> tokensList = c.Tokenize(strExpression, 0);
            TokensStack  tokens     = new TokensStack();

            for (int i = tokensList.Count - 1; i >= 0; i--)
            {
                tokens.Push(tokensList[i]);
            }
            LetStatement example    = new LetStatement();
            Expression   expression = Expression.Create(tokens);

            expression.Parse(tokens);
            LetStatement let = new LetStatement();

            let.Variable = "x";
            let.Value    = expression;
            List <LetStatement> letStatements = c.SimplifyExpressions(let, varDecs);

            for (int i = 0; i < letStatements.Count; i++)
            {
                Console.WriteLine(letStatements[i]);
            }

            Console.WriteLine("Simplifying Expressions completetd");
        }
コード例 #6
0
        static void Test4()
        {
            Compiler c = new Compiler();

            List <string> lVars = new List <string>();

            lVars.Add("var int x1;");
            lVars.Add("var int x2;");
            lVars.Add("var int x3;");
            lVars.Add("var int x4;");
            lVars.Add("var int x5;");
            List <VarDeclaration> vars = c.ParseVarDeclarations(lVars);


            List <string> lAssignments = new List <string>();

            lAssignments.Add("let x1 = 1;");
            lAssignments.Add("let x2 = 3;");
            lAssignments.Add("let x3 = (((x1 + 1) - 4) + ((x2 + x1) - 2));"); // 0
            lAssignments.Add("let x4 = ((x2 + x3) - (x2 -7));");              // 7
            lAssignments.Add("let x5 = (1000 - ((x1 + (((((x2 + x3) - x4) + x1) - x2) + x3)) - ((x1 - x2) + x4)));");

            List <LetStatement>      ls      = c.ParseAssignments(lAssignments);
            Dictionary <string, int> dValues = new Dictionary <string, int>();

            dValues["x1"] = 0;
            dValues["x2"] = 0;
            dValues["x3"] = 0;
            dValues["x4"] = 0;
            dValues["x5"] = 0;

            CPUEmulator cpu = new CPUEmulator();

            cpu.Compute(ls, dValues);

            List <LetStatement> lSimple = c.SimplifyExpressions(ls, vars);

            Dictionary <string, int> dValues2 = new Dictionary <string, int>();

            dValues2["x1"] = 0;
            dValues2["x2"] = 0;
            dValues2["x3"] = 0;
            dValues2["x4"] = 0;
            dValues2["x5"] = 0;

            cpu.Compute(lSimple, dValues2);

            foreach (string sKey in dValues.Keys)
            {
                if (dValues[sKey] != dValues2[sKey])
                {
                    Console.WriteLine("BGUBGU");
                }
            }

            List <string> lAssembly = c.GenerateCode(lSimple, vars);

            InitLCL(lAssembly);
            cpu.Code = lAssembly;
            cpu.Run(1000, false);
            if (cpu.M[24] != dValues2["x5"])
            {
                Console.WriteLine("BUGBUG");
            }
        }