Ejemplo n.º 1
0
        /// <summary>
        /// 構文解析の行われた TopNode に対して、ILコードの発行を行う
        /// 結果は、Codes に得られる
        /// </summary>
        public NakoILCodeList WriteIL()
        {
            var writer = new NakoILWriter();

            writer.Write(this.topNode);
            codes = writer.Result;
            for (int i = 0; i < this.GlobalVar.Count(); i++)  //interpreterで使えるように関数定義が保存されている変数をアドレスに変換
            {
                NakoVariable v = this.GlobalVar.GetVar(i);
                if (v.Body is NakoNodeDefFunction)
                {
                    NakoVariable   setVar = new NakoVariable();
                    string         label  = "FUNC_" + ((NakoNodeDefFunction)v.Body).func.name;
                    NakoILCodeList cl     = writer.Result;
                    for (int j = 0; j < cl.Count; j++)
                    {
                        NakoILCode c = cl [j];
                        if (c.value is string && (string)c.value == label)
                        {
                            setVar.SetBody(j, NakoVarType.Int);
                            break;
                        }
                    }
                    this.GlobalVar.SetVar(i, setVar);
                }
            }
            codes.globalVar = this.GlobalVar;
            return(Codes);
        }
Ejemplo n.º 2
0
 public void TestArraykeys()
 {
     // (1)
     // (1)
     codes = ns.WriteIL(
         "A=``\n" +
         "A[`a`]=`aaa`\n" +
         "A[`b`]=`bbb`\n" +
         "A[`c`]=`ccc`\n" +
         "(Aの配列ハッシュキー列挙)で反復\n" +
         "  「***{回数}:{対象}」を継続表示\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:a***2:b***3:c");
     codes = ns.WriteIL(
         "A=``\n" +
         "A[10]=`aaa`\n" +
         "A[1]=`bbb`\n" +
         "A[2]=`ccc`\n" +
         "(Aの配列ハッシュキー列挙)で反復\n" +
         "  「***{回数}:{対象}」を継続表示\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:1***2:2***3:10");
 }
Ejemplo n.º 3
0
        public void TestAndOr()
        {
            NakoCompiler    ns     = new NakoCompiler();
            NakoInterpreter runner = new NakoInterpreter();
            NakoILCodeList  codes  = null;

            // AND
            codes = ns.WriteIL(
                "A=1\n" +
                "B=2\n" +
                "C=3\n" +
                "もし、A==1 && B==1ならば\n" +
                "  PRINT `11`\n" +
                "もし、A==1 && C==3ならば\n" +
                "  PRINT `13`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "13");

            // or
            codes = ns.WriteIL(
                "A=1\n" +
                "B=2\n" +
                "C=3\n" +
                "もし、A==1 || B==1ならば\n" +
                "  PRINT `11`\n" +
                "もし、A==2 || C==1ならば\n" +
                "  PRINT `13`\n"
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "11");
        }
Ejemplo n.º 4
0
 public void TestCallUserFuncInUserFunc()
 {
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」\n" +
         "●ふが\n" +
         "  ほげ" +
         "\n" +
         "PRINT ふが\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふが");
     //ユーザー関数内でユーザー関数を呼び出すと、それまでに定義したローカル変数をリセットしてしまうバグがあったのでテスト追加
     codes = ns.WriteIL(
         "●ほげ(Sで)\n" +
         "  それ=「ほげ」\n" +
         "●ふが(Sで)\n" +
         "  T=Sでほげ\n" +
         "  それ=S\n" +
         "\n" +
         "PRINT `ふが`でふが\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふが");
 }
Ejemplo n.º 5
0
 public void TestNormal()
 {
     // (1)
     codes = ns.WriteIL("PRINT 1+2*3");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 6
0
 public void TestCallUserFuncInUserFunc()
 {
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」\n" +
         "●ふが\n" +
         "  ほげ" +
         "\n" +
         "PRINT ふが\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふが");
     //ユーザー関数内でユーザー関数を呼び出すと、それまでに定義したローカル変数をリセットしてしまうバグがあったのでテスト追加
     codes = ns.WriteIL(
         "●ほげ(Sで)\n" +
         "  それ=「ほげ」\n" +
         "●ふが(Sで)\n" +
         "  T=Sでほげ\n" +
         "  それ=S\n" +
         "\n" +
         "PRINT `ふが`でふが\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふが");
 }
Ejemplo n.º 7
0
 public void TestArraykeys()
 {
     // (1)
     // (1)
     codes = ns.WriteIL(
         "A=``\n"+
         "A[`a`]=`aaa`\n"+
         "A[`b`]=`bbb`\n"+
         "A[`c`]=`ccc`\n"+
         "(Aの配列ハッシュキー列挙)で反復\n"+
         "  「***:{対象}」を継続表示\n"+
         ""
     );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:a***2:b***3:c");
     codes = ns.WriteIL(
         "A=``\n"+
         "A[10]=`aaa`\n"+
         "A[1]=`bbb`\n"+
         "A[2]=`ccc`\n"+
         "(Aの配列ハッシュキー列挙)で反復\n"+
         "  「***:{対象}」を継続表示\n"+
         ""
     );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:a***2:b***3:c");
 }
Ejemplo n.º 8
0
 public void TestNormal()
 {
     // (1)
     codes = ns.WriteIL("PRINT 1+2*3");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 9
0
 public void TestSysFunc_sub()
 {
     codes = ns.WriteIL(
         "PRINT 5から3を引く\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "2");
 }
Ejemplo n.º 10
0
 public void TestCall_likeBASIC4()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "1+2に3を足して継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "6");
 }
Ejemplo n.º 11
0
 public void TestCall_likeBASIC3()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "引く(足す(3,8),4)を継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 12
0
 public void TestSysFunc_subEx()
 {
     codes = ns.WriteIL(
         "A=10;B=3;" +
         "AからBを引く!\n" +
         "PRINT A");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 13
0
 public void TestCall_likeBASIC2()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "引く(10,4)を継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("6", runner.PrintLog);
 }
Ejemplo n.º 14
0
        /// <summary>
        /// 構文解析の行われた TopNode に対して、ILコードの発行を行う
        /// 結果は、Codes に得られる
        /// </summary>
        public NakoILCodeList WriteIL()
        {
            var writer = new NakoILWriter();

            writer.Write(this.topNode);
            codes           = writer.Result;
            codes.globalVar = this.GlobalVar;
            return(Codes);
        }
Ejemplo n.º 15
0
 public void TestCall_likeBASIC3()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "引く(足す(3,8),4)を継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 16
0
 public void TestCall_likeBASIC2()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "引く(10,4)を継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("6", runner.PrintLog);
 }
Ejemplo n.º 17
0
 public void Test3_RepeatTimes()
 {
     codes = ns.WriteIL(
         "3回\n" +
         "  PRINT `a`\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "aaa");
 }
Ejemplo n.º 18
0
 public void TestFOR1()
 {
     codes = ns.WriteIL(
         "Iを1から5まで繰り返す\n" +
         "  PRINT I\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12345");
 }
Ejemplo n.º 19
0
 public void TestFOR1()
 {
     codes = ns.WriteIL(
         "Iを1から5まで繰り返す\n" +
         "  PRINT I\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12345");
 }
Ejemplo n.º 20
0
 public void Test3_RepeatTimes()
 {
     codes = ns.WriteIL(
         "3回\n" +
         "  PRINT `a`\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "aaa");
 }
Ejemplo n.º 21
0
 public void TestSysFunc_AddEx_ByRef()
 {
     codes = ns.WriteIL(
         "A=10;Aに2を足す!\n" +
         "PRINT A\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12");
 }
Ejemplo n.º 22
0
 public void TestSysFunc_AddAndLet()
 {
     codes = ns.WriteIL(
         "A=10に2を足す\n" +
         "PRINT A\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12");
 }
Ejemplo n.º 23
0
 public void TestStackCall_noJosi()
 {
     // memo:
     // 敢えて、FORTH っぽく、助詞がなくても動くようにしたい!!
     codes = ns.WriteIL(
         "100,10,5,引く,足す,継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("105", runner.PrintLog);
 }
Ejemplo n.º 24
0
 public void TestForContinue()
 {
     codes = ns.WriteIL(
         "Iを1から5まで繰り返す\n" +
         "  もし、I=3ならば、続ける。\n" +
         "  PRINT I\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "1245");
 }
Ejemplo n.º 25
0
 public void TestFOR2_BREAK()
 {
     codes = ns.WriteIL(
         "Iを1から5まで繰り返す\n" +
         "  PRINT I\n" +
         "    もし、I=3ならば、抜ける。\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "123");
 }
Ejemplo n.º 26
0
 public void TestUserFunc_Add2()
 {
     codes = ns.WriteIL(
         "●AにBを加算\n" +
         "  それ=A+B\n" +
         "\n" +
         "3に5を加算して、それに8を加算する;PRINT それ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "16");
 }
Ejemplo n.º 27
0
        public void TestCalcStr2()
        {
            // (7) 「+」は数値同士の加算
            codes = ns.WriteIL("PRINT `30`+30");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "60");

            // (8) 「&」は文字列同士の加算
            codes = ns.WriteIL("PRINT `30`&30");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "3030");
        }
Ejemplo n.º 28
0
        public void TestCalcStr2()
        {
            // (7) 「+」は数値同士の加算
            codes = ns.WriteIL("PRINT `30`+30");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "60");

            // (8) 「&」は文字列同士の加算
            codes = ns.WriteIL("PRINT `30`&30");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "3030");
        }
Ejemplo n.º 29
0
        public void TestCalc2()
        {
            // (5)
            codes = ns.WriteIL("PRINT (1+2)*3");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "9");

            // (6)
            codes = ns.WriteIL("PRINT 2^3");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "8");
        }
Ejemplo n.º 30
0
        public void TestRenzokuCalc()
        {
            // (1)
            codes = ns.WriteIL("PRINT 1+2+3+4");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "10");

            // (2)
            codes = ns.WriteIL("PRINT 1*2*3*4");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "24");
        }
Ejemplo n.º 31
0
        public void TestCalc2()
        {
            // (5)
            codes = ns.WriteIL("PRINT (1+2)*3");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "9");

            // (6)
            codes = ns.WriteIL("PRINT 2^3");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "8");
        }
Ejemplo n.º 32
0
 public void TestSetUserFuncToVariable()
 {
     codes = ns.WriteIL(
         "●関数A (Sの)\n" +
         "  S+10で戻る\n" +
         "B = 関数Aの定義\n" +
         "A [`a`]= B\n" +
         "PRINT A [`a`](10)\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("20", runner.PrintLog);
 }
Ejemplo n.º 33
0
 public void TestSetUserFuncWithDefaultValue()
 {
     codes = ns.WriteIL(
         "●関数A ({整数=10}Sの)\n" +
         "  S+10で戻る\n" +
         "B = 関数Aの定義\n" +
         "A [`a`]= B\n" +
         "PRINT A [`a`]()\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("20", runner.PrintLog);
 }
Ejemplo n.º 34
0
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="list"></param>
 public NakoInterpreter(NakoILCodeList list)
 {
     this.UseConsoleOut = false;
     this.debugMode     = false;
     Reset();
     this.list = list;
     if (list.globalVar != null)
     {
         this.globalVar = list.globalVar;
     }
     this.exceptionTable = new NakoExceptionTable();
 }
Ejemplo n.º 35
0
 public void TestCallUserFuncAndCheckGlobalVar()
 {
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  A=「ふが」\n" +
         "  Aで戻る\n" +
         "A=`hoge`\n" +
         "B = ほげ\n" +
         "PRINT A\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("hoge", runner.PrintLog);
 }
Ejemplo n.º 36
0
 public void Test2_Nest()
 {
     codes = ns.WriteIL(
         "Iを1から2まで繰り返す\n" +
         "  PRINT `[`&I&`:`\n" +
         "  Jを1から3まで繰り返す\n" +
         "    PRINT J\n" +
         "  PRINT `]`\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "[1:123][2:123]");
 }
Ejemplo n.º 37
0
 public void Test2_Nest()
 {
     codes = ns.WriteIL(
         "Iを1から2まで繰り返す\n" +
         "  PRINT `[`&I&`:`\n" +
         "  Jを1から3まで繰り返す\n" +
         "    PRINT J\n" +
         "  PRINT `]`\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "[1:123][2:123]");
 }
Ejemplo n.º 38
0
 public void TestCallUserFuncWithUserFuncParameter()
 {
     codes = ns.WriteIL(
         "●マップ (Sを{ 関数 (1)}Fで)\n" +
         "  R = F (S)\n" +
         "  Rで戻る\n" +
         "●関数A (Sの)\n" +
         "  S+10で戻る\n" +
         "RET = マップ (10, 関数Aの定義)\n" +
         "PRINT RET\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("20", runner.PrintLog);
 }
Ejemplo n.º 39
0
 public void TestUserFunc_Multi()
 {
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」\n" +
         "●ほぎゃ\n" +
         "  それ=「bar」" +
         "\n" +
         "PRINT ほげ\n" +
         "PRINT ほぎゃ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふがbar");
 }
Ejemplo n.º 40
0
 public void TestUserFunc_Add3()
 {
     codes = ns.WriteIL(
         "\n\n●AにBを加算\n" +
         "  それ=A+B\n" +
         "\n" +
         "●AにBをKAKERU\n" +
         "  それ=A*B\n" +
         "\n" +
         "3に5をKAKERU;PRINT それ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "15");
 }
Ejemplo n.º 41
0
 public void TestInclude()
 {
     // (1)
     codes = ns.WriteIL(
         @"
     `test.nako`を取り込む
     a[`a`]=`aaa`
     a[`b`]=`bbb`
     a[`c`]=`ccc`
     aで反復
       「***{回数}:{対象}」を継続表示
     ");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:ddd***2:eee***3:fff***4:aaa***5:bbb***6:ccc");
 }
Ejemplo n.º 42
0
        public void TestCalcStr()
        {
            // (2)
            codes = ns.WriteIL("PRINT `abc`&`def`");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "abcdef");

            // (3)
            codes = ns.WriteIL("PRINT 10 + 20 & `a`");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "30a");

            // (4)
            System.Diagnostics.Debug.WriteLine(Libnako.JPNCompiler.Tokenizer.NakoTokenization.Tokenize("PRINT 10 * 20 & `a`").toTypeString());
            codes = ns.WriteIL("PRINT 10 * 20 & `a`");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "200a");
        }
Ejemplo n.º 43
0
        public void Test1_Normal()
        {
            // (1)
            codes = ns.WriteIL(
                "Iを1から3まで繰り返す\n"+
                "  PRINT I\n" +
                ""
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "123");

            // (2)
            codes = ns.WriteIL(
                "FROM=2;TO=5"+
                "IをFROMからTOまで繰り返す\n" +
                "  PRINT I\n" +
                ""
                );
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "2345");
        }
Ejemplo n.º 44
0
 public void Test1_Normal()
 {
     // (1)
     codes = ns.WriteIL(
         "A[0] = `aaa`\n"+
         "A[1] = `bbb`\n"+
         "A[2] = `ccc`\n"+
         "Aを反復\n"+
         "  PRINT 「***{回数}:{対象}」"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:aaa***2:bbb***3:ccc");
     codes = ns.WriteIL(
         "A[0] = `aaa`\n"+
         "A[1] = `bbb`\n"+
         "A[2] = `ccc`\n"+
         "Aを反復\n"+
         "  PRINT 「***{回数}:{対象}」" +
         "  続ける"
     );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "***1:aaa***2:bbb***3:ccc");
 }
Ejemplo n.º 45
0
 public void TestCall_likeBASIC4()
 {
     // memo: BASICの関数のように関数をコール
     codes = ns.WriteIL(
         "1+2に3を足して継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "6");
 }
Ejemplo n.º 46
0
 public void TestSysFunc_AddAndLet()
 {
     codes = ns.WriteIL(
         "A=10に2を足す\n"+
         "PRINT A\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12");
 }
Ejemplo n.º 47
0
 /// <summary>
 /// 構文解析の行われた TopNode に対して、ILコードの発行を行う
 /// 結果は、Codes に得られる
 /// </summary>
 public NakoILCodeList WriteIL()
 {
     var writer = new NakoILWriter();
     writer.Write(this.topNode);
     codes = writer.Result;
     codes.globalVar = this.GlobalVar;
     return Codes;
 }
Ejemplo n.º 48
0
 /// <summary>
 /// 初期化
 /// </summary>
 public void Init()
 {
     this.result = new NakoILCodeList();
     this.labels = new Dictionary<NakoILCode, long>();
     this.exceptions = new Dictionary<String,NakoILCode>();
 }
Ejemplo n.º 49
0
 public void TestSysFunc_AddEx_ByRef()
 {
     codes = ns.WriteIL(
         "A=10;Aに2を足す!\n" +
         "PRINT A\n" +
         ""
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "12");
 }
Ejemplo n.º 50
0
 /// <summary>
 /// constructor
 /// </summary>
 /// <param name="list"></param>
 public NakoInterpreter(NakoILCodeList list)
 {
     this.UseConsoleOut = false;
     this.debugMode = false;
     Reset();
     this.list = list;
     if (list.globalVar != null) {
         this.globalVar = list.globalVar;
     }
     this.exceptionTable = new NakoExceptionTable ();
 }
Ejemplo n.º 51
0
 public void TestFOR2_BREAK()
 {
     codes = ns.WriteIL(
         "Iを1から5まで繰り返す\n" +
         "  PRINT I\n" +
         "    もし、I=3ならば、抜ける。\n" +
         "\n"
         );
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "123");
 }
Ejemplo n.º 52
0
 public void TestSysFunc_sub()
 {
     codes = ns.WriteIL(
         "PRINT 5から3を引く\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "2");
 }
Ejemplo n.º 53
0
        /// <summary>
        /// ILコードを実行する
        /// </summary>
        /// <param name="list">実行するILコードリスト</param>
        /// <returns>実行が成功したかどうか</returns>
        public bool Run(NakoILCodeList list)
        {
            if (list != null)
            {
                Reset();
                this.list = list;
                if (list.globalVar != null) {
                    this.globalVar = list.globalVar;
                }
                this.exceptionTable = new NakoExceptionTable ();
            }
            runpos = 0;
            bool result = _run();

            FinPlugins();
            return result;
        }
Ejemplo n.º 54
0
 public void TestUserFunc_Add2()
 {
     codes = ns.WriteIL(
         "●AにBを加算\n" +
         "  それ=A+B\n" +
         "\n" +
         "3に5を加算して、それに8を加算する;PRINT それ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "16");
 }
Ejemplo n.º 55
0
 public void TestSysFunc_subEx()
 {
     codes = ns.WriteIL(
         "A=10;B=3;" +
         "AからBを引く!\n" +
         "PRINT A");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "7");
 }
Ejemplo n.º 56
0
 public void TestStackCall_noJosi()
 {
     // memo:
     // 敢えて、FORTH っぽく、助詞がなくても動くようにしたい!!
     codes = ns.WriteIL(
         "100,10,5,引く,足す,継続表示\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual("105",runner.PrintLog);
 }
Ejemplo n.º 57
0
 public void TestUserFunc_Add3()
 {
     codes = ns.WriteIL(
         "\n\n●AにBを加算\n" +
         "  それ=A+B\n" +
         "\n" +
         "●AにBをKAKERU\n" +
         "  それ=A*B\n" +
         "\n" +
         "3に5をKAKERU;PRINT それ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "15");
 }
Ejemplo n.º 58
0
        public void TestRenzokuCalc()
        {
            // (1)
            codes = ns.WriteIL("PRINT 1+2+3+4");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "10");

            // (2)
            codes = ns.WriteIL("PRINT 1*2*3*4");
            runner.Run(codes);
            Assert.AreEqual(runner.PrintLog, "24");
        }
Ejemplo n.º 59
0
 public void TestUserFunc_Multi()
 {
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」\n" +
         "●ほぎゃ\n" +
         "  それ=「bar」" +
         "\n" +
         "PRINT ほげ\n" +
         "PRINT ほぎゃ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "ふがbar");
 }
Ejemplo n.º 60
0
 public void TestUserFunc_Ret()
 {
     runner.Run(ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」" +
         "  戻る" +
         "  それ=「ぴよ」" +
         "\n" +
         "PRINT ほげ\n" +
         "\n"));
     Assert.AreEqual(runner.PrintLog, "ふが");
     codes = ns.WriteIL(
         "●ほげ\n" +
         "  それ=「ふが」" +
         "  「bar」で戻る" +
         "  それ=「ぴよ」" +
         "\n" +
         "PRINT ほげ\n" +
         "\n");
     runner.Run(codes);
     Assert.AreEqual(runner.PrintLog, "bar");
 }