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