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"); } }
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); }
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"); } }
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); }
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"); }
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"); } }