Beispiel #1
0
        public void TryDeclarations()
        {
            var parser = new AB.Parser(@"
                dcl
                    n integer;
                    s char(10);
                enddcl
                map 1 to n
                clear s");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(2, spec.data.Count);
            Assert.AreEqual(2, spec.code.Count);
            Assert.IsInstanceOfType(spec.code[0], typeof(AB.MapStmt));
            Assert.IsInstanceOfType(spec.code[1], typeof(AB.ClearStmt));
            var d1 = spec.data[0] as AB.Decl;
            var d2 = spec.data[1] as AB.Decl;

            Assert.IsNotNull(d1);
            Assert.IsNotNull(d2);
            var v1 = d1.v as AB.Var;
            var v2 = d2.v as AB.Var;

            Assert.IsNotNull(v1);
            Assert.IsNotNull(v2);
            Assert.AreEqual("n", v1.value);
            Assert.AreEqual("s", v2.value);
            var t1 = d1.t as AB.Integer;
            var t2 = d2.t as AB.String;

            Assert.IsNotNull(t1);
            Assert.IsNotNull(t2);
            Assert.AreEqual(10, t2.n);
        }
Beispiel #2
0
        public void TryExperimental6()
        {
            var parser = new AB.Parser("if a if b map c to d map e to f endif map g to h endif");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(1, spec.code.Count);
            Console.WriteLine($"[(1)] : {spec.code[0]}");
            var if1 = spec.code[0] as AB.IfStmt; // if a

            Assert.IsNotNull(if1);
            Assert.AreEqual(2, if1.branch.Count);
            Console.WriteLine($"[(2)] : {if1.branch[0]} + {if1.branch[1]}");
            var if2 = if1.branch[0] as AB.IfStmt; // if b

            Assert.IsNotNull(if2);
            Assert.AreEqual(2, if2.branch.Count);
            Console.WriteLine($"[(3)] : {if2.branch[0]} + {if2.branch[1]}");
            var map1 = if2.branch[0] as AB.MapStmt; // map c to d

            Assert.IsNotNull(map1);
            var map2 = if2.branch[1] as AB.MapStmt; // map e to f

            Assert.IsNotNull(map2);
            var map3 = if1.branch[1] as AB.MapStmt; // map g to h

            Assert.IsNotNull(map3);
        }
Beispiel #3
0
        public void TryFailingExample3()
        {
            var parser = new AB.Parser(@"
                return
                if COND1
                    clear mvgdm
                    if COND2
                        clear btiyxe
                    endif
                    clear gq
                endif
                if gwv return endif");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(3, spec.code.Count);
            Assert.IsInstanceOfType(spec.code[0], typeof(AB.ReturnStmt));
            Assert.IsInstanceOfType(spec.code[1], typeof(AB.IfStmt));
            Assert.IsInstanceOfType(spec.code[2], typeof(AB.IfStmt));
            var if1 = spec.code[1] as AB.IfStmt;

            Assert.IsInstanceOfType(if1.branch[0], typeof(AB.ClearStmt));
            Assert.IsInstanceOfType(if1.branch[1], typeof(AB.IfStmt));
            Assert.IsInstanceOfType(if1.branch[2], typeof(AB.ClearStmt));
            var if2 = if1.branch[1] as AB.IfStmt;

            Assert.IsInstanceOfType(if1.branch[0], typeof(AB.ClearStmt));
        }
Beispiel #4
0
        public void TryEngagedParser()
        {
            var parser = new AB.Parser(File.ReadAllText(Path.Combine(AppBuilderCode, "manual", "simple.ab")));

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(1, spec.data.Count);
            Assert.AreEqual(1, spec.code.Count);
        }
Beispiel #5
0
        public void TryExperimental1()
        {
            var parser = new AB.Parser("if x map y to z endif");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(1, spec.code.Count);
            var if1 = spec.code[0] as AB.IfStmt;

            Assert.IsNotNull(if1);
            Assert.AreEqual(1, if1.branch.Count);
            var map1 = if1.branch[0] as AB.MapStmt;

            Assert.IsNotNull(map1);
        }
Beispiel #6
0
        public void TryFailingExample1()
        {
            var parser = new AB.Parser(@"
                clear akpjke
                map pwrmgtq to hjturvlsikt
                map 1519307387 to ejxegwgv
                if 1880563650 return endif");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(4, spec.code.Count);
            Assert.IsInstanceOfType(spec.code[0], typeof(AB.ClearStmt));
            Assert.IsInstanceOfType(spec.code[1], typeof(AB.MapStmt));
            Assert.IsInstanceOfType(spec.code[2], typeof(AB.MapStmt));
            Assert.IsInstanceOfType(spec.code[3], typeof(AB.IfStmt));
            Assert.IsInstanceOfType((spec.code[3] as AB.IfStmt)?.branch[0], typeof(AB.ReturnStmt));
        }
Beispiel #7
0
        public void TryAlmostBadTokens()
        {
            var parser = new AB.Parser(@"map mapper to iffer");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(1, spec.code.Count);
            var map = spec.code[0] as AB.MapStmt;

            Assert.IsNotNull(map);
            var src = map.source as AB.Var;

            Assert.IsNotNull(src);
            Assert.AreEqual("mapper", src.value);
            var tgt = map.target as AB.Var;

            Assert.IsNotNull(src);
            Assert.AreEqual("iffer", tgt.value);
        }
Beispiel #8
0
        public void TryFailingExample2()
        {
            var parser = new AB.Parser(@"
                if abzhnyfsobo return endif
                if 99773466 return endif
                if iwksk return endif
                map ifnaqtipf to bqnl
                return
                return");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(6, spec.code.Count);
            Assert.IsInstanceOfType(spec.code[0], typeof(AB.IfStmt));
            Assert.IsInstanceOfType(spec.code[1], typeof(AB.IfStmt));
            Assert.IsInstanceOfType(spec.code[2], typeof(AB.IfStmt));
            Assert.IsInstanceOfType(spec.code[3], typeof(AB.MapStmt));
            Assert.IsInstanceOfType(spec.code[4], typeof(AB.ReturnStmt));
            Assert.IsInstanceOfType(spec.code[5], typeof(AB.ReturnStmt));
        }
Beispiel #9
0
        public void TryExperimental4()
        {
            var parser = new AB.Parser("if a if b return endif endif");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(1, spec.code.Count);
            Console.WriteLine($"[(1)] : {spec.code[0]}");
            var if1 = spec.code[0] as AB.IfStmt; // if a

            Assert.IsNotNull(if1);
            Assert.AreEqual(1, if1.branch.Count);
            Console.WriteLine($"[(2)] : {if1.branch[0]}");
            var if2 = if1.branch[0] as AB.IfStmt; // if b

            Assert.IsNotNull(if2);
            Assert.AreEqual(1, if2.branch.Count);
            Console.WriteLine($"[(3)] : {if2.branch[0]}");
            var ret1 = if2.branch[0] as AB.ReturnStmt;

            Assert.IsNotNull(ret1);
        }
Beispiel #10
0
        public void TryExperimental3()
        {
            var parser = new AB.Parser("if a map b to c map d to e endif map f to g");

            AB.ABProgram spec = parser.Parse() as AB.ABProgram;
            Assert.IsNotNull(spec);
            Assert.AreEqual(0, spec.data.Count);
            Assert.AreEqual(2, spec.code.Count);
            Console.WriteLine($"[AB] : {spec.code[0]} + {spec.code[1]}");
            var if1 = spec.code[0] as AB.IfStmt;

            Assert.IsNotNull(if1);
            Assert.AreEqual(2, if1.branch.Count);
            var map1 = if1.branch[0] as AB.MapStmt;

            Assert.IsNotNull(map1);
            var map2 = if1.branch[1] as AB.MapStmt;

            Assert.IsNotNull(map2);
            var map3 = spec.code[1] as AB.MapStmt;

            Assert.IsNotNull(map3);
        }