public void TestCalc() { NakoNode topNode; // 1 topNode = compiler.ParseOnlyValue("1+2*3"); Assert.IsTrue(topNode.hasChildren()); Assert.IsTrue(topNode.Children.checkNodeType( new NakoNodeType[] { NakoNodeType.CALC })); // 2 topNode = compiler.ParseOnlyValue("(1+2)*3"); Assert.IsTrue(topNode.hasChildren()); Assert.IsTrue(topNode.Children.checkNodeType( new NakoNodeType[] { NakoNodeType.CALC })); // 3 topNode = compiler.Parse("A=5"); Assert.IsTrue(topNode.hasChildren()); Assert.IsTrue(topNode.Children.checkNodeType(new NakoNodeType[] { NakoNodeType.LET })); }
public void TestInterpreterCalcReal() { NakoCompiler ns = new NakoCompiler(); NakoInterpreter runner = new NakoInterpreter(); // 1 ns.source = "PRINT 2 * 1.5"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("3", runner.PrintLog); // 2 runner.Reset(); ns.source = "PRINT (1 / 2) * 4"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("2", runner.PrintLog); // 3 runner.Reset(); ns.source = "PRINT 4 % 3"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("1", runner.PrintLog); // 4 runner.Reset(); ns.source = "PRINT 2 ^ 3"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("8", runner.PrintLog); // 5 : べき乗の優先順位 runner.Reset(); ns.source = "PRINT 2 * 3 ^ 3"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("54", runner.PrintLog); }
public void TestInterpreter2() { NakoCompiler ns = new NakoCompiler(); NakoInterpreter runner = new NakoInterpreter(); // 1 ns.source = "A=5; PRINT A"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("5", runner.PrintLog); // 2 runner.Reset(); ns.source = "A=5; B=8; C=A+B; PRINT C"; ns.Tokenize(); ns.Parse(); runner.Run(ns.WriteIL()); Assert.AreEqual("13", runner.PrintLog); }