コード例 #1
0
        public void ExpressionDifferenceTest1()
        {
            ASTNode ast1 = new ArithmExprNode(
                1,
                new ArithmExprNode(
                    2,
                    new LitExprNode(2, 3),
                    ArithmOpNode.FromSymbol(2, "+"),
                    new LitExprNode(2, 3)
                    ),
                ArithmOpNode.FromSymbol(2, "-"),
                new LitExprNode(2, 6)
                );
            ASTNode ast2 = new ArithmExprNode(
                1,
                new ArithmExprNode(
                    1,
                    new LitExprNode(1, 3),
                    ArithmOpNode.FromSymbol(1, "+"),
                    new LitExprNode(1, 3)
                    ),
                ArithmOpNode.FromSymbol(1, "-"),
                new ArithmExprNode(
                    1,
                    new LitExprNode(1, 3),
                    ArithmOpNode.FromSymbol(1, "+"),
                    new LitExprNode(1, 3)
                    )
                );

            AssertNodes(ast1, ast2, eq: false);
        }
コード例 #2
0
        public void SelfReferenceSubstituteTest()
        {
            var ast1 = new ArithmExprNode(1,
                                          new IdNode(1, "x"),
                                          ArithmOpNode.FromSymbol(1, "+"),
                                          new ArithmExprNode(1,
                                                             new IdNode(1, "y"),
                                                             ArithmOpNode.FromSymbol(1, "+"),
                                                             new IdNode(1, "x")
                                                             )
                                          );

            var repl = new ArithmExprNode(1,
                                          new IdNode(1, "y"),
                                          new ArithmOpNode(1, "-", BinaryOperations.ArithmeticFromSymbol("-")),
                                          new IdNode(1, "x")
                                          );
            var ast2 = new ArithmExprNode(1,
                                          new IdNode(1, "x"),
                                          ArithmOpNode.FromSymbol(1, "+"),
                                          new ArithmExprNode(1,
                                                             repl,
                                                             ArithmOpNode.FromSymbol(1, "+"),
                                                             new IdNode(1, "x")
                                                             )
                                          );

            Assert.That(ast1.Substitute(new IdNode(2, "y"), repl), Is.EqualTo(ast2));
        }
コード例 #3
0
        public void ExpressionSubstituteTest()
        {
            var ast1 = new ArithmExprNode(1,
                                          new IdNode(1, "x"),
                                          ArithmOpNode.FromSymbol(1, "+"),
                                          new IdNode(1, "x")
                                          );
            var ast2 = new ArithmExprNode(1,
                                          new LitExprNode(1, 1),
                                          ArithmOpNode.FromSymbol(1, "+"),
                                          new LitExprNode(1, 1)
                                          );

            Assert.That(ast1.Substitute(new IdNode(2, "x"), new LitExprNode(2, 1)), Is.EqualTo(ast2));
        }
コード例 #4
0
        public void ArithmeticExpressionTests()
        {
            this.AssertParse(
                new ArithmExprNode(1,
                                   new LitExprNode(1, 3),
                                   ArithmOpNode.FromSymbol(1, "+"),
                                   new LitExprNode(1, 1)
                                   ),
                Expr.Parse("4")
                );

            this.AssertParse(
                new ArithmExprNode(1,
                                   new IdNode(1, "x"),
                                   ArithmOpNode.FromSymbol(1, "+"),
                                   new LitExprNode(1, 1)
                                   ),
                Expr.Parse("1 + x")
                );

            this.AssertParse(
                new ArithmExprNode(1,
                                   new IdNode(1, "x"),
                                   ArithmOpNode.FromSymbol(1, "+"),
                                   new ArithmExprNode(1,
                                                      new IdNode(1, "x"),
                                                      ArithmOpNode.FromSymbol(1, "-"),
                                                      new LitExprNode(1, 1)
                                                      )
                                   ),
                Expr.Parse("-1 + 2*x")
                );

            this.AssertWildcardParse(
                new ArithmExprNode(1,
                                   new IdNode(1, "x"),
                                   ArithmOpNode.FromSymbol(1, "+"),
                                   new ArithmExprNode(1,
                                                      new IdNode(1, "x"),
                                                      ArithmOpNode.FromBitwiseSymbol(1, "<<"),
                                                      new LitExprNode(1, 1)
                                                      )
                                   ),
                "? + x"
                );
        }
コード例 #5
0
        public void VariableDeclarationDifferenceTest1()
        {
            ASTNode ast1 = new DeclStatNode(
                1,
                new DeclSpecsNode(1, "public static", "int"),
                new DeclListNode(
                    1,
                    new VarDeclNode(
                        2,
                        new IdNode(2, "x"),
                        new ArithmExprNode(
                            3,
                            new LitExprNode(4, 2),
                            ArithmOpNode.FromSymbol(4, "+"),
                            new LitExprNode(4, 1)
                            )
                        )
                    )
                );
            ASTNode ast2 = new DeclStatNode(
                2,
                new DeclSpecsNode(2, "public static", "int"),
                new DeclListNode(
                    2,
                    new VarDeclNode(
                        2,
                        new IdNode(2, "x"),
                        new ArithmExprNode(
                            3,
                            new LitExprNode(4, 1),
                            ArithmOpNode.FromSymbol(4, "+"),
                            new LitExprNode(4, 1)
                            )
                        )
                    )
                );

            AssertNodes(ast1, ast2, eq: false);
        }
コード例 #6
0
        public void ExpressionEqualityTest()
        {
            ASTNode ast1 = new ArithmExprNode(
                1,
                new ArithmExprNode(
                    2,
                    new LitExprNode(2, 3),
                    ArithmOpNode.FromSymbol(2, "+"),
                    new LitExprNode(2, 3)
                    ),
                ArithmOpNode.FromSymbol(2, "-"),
                new ArithmExprNode(
                    2,
                    new LitExprNode(2, 3),
                    ArithmOpNode.FromSymbol(2, "+"),
                    new LitExprNode(2, 3)
                    )
                );
            ASTNode ast2 = new ArithmExprNode(
                1,
                new ArithmExprNode(
                    1,
                    new LitExprNode(1, 3),
                    ArithmOpNode.FromSymbol(1, "+"),
                    new LitExprNode(1, 3)
                    ),
                ArithmOpNode.FromSymbol(1, "-"),
                new ArithmExprNode(
                    1,
                    new LitExprNode(1, 3),
                    ArithmOpNode.FromSymbol(1, "+"),
                    new LitExprNode(1, 3)
                    )
                );

            AssertNodes(ast1, ast2, eq: true);
        }
コード例 #7
0
ファイル: BaseASTVisitor.cs プロジェクト: ivan-ristovic/LICC
 public virtual TResult Visit(ArithmOpNode node) => this.VisitChildren(node);
コード例 #8
0
        public void ComplexAssignmentTests()
        {
            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new ExprListNode(1,
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "+="),
                                                                         new LitExprNode(1, 2)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "+="),
                                                                         new LitExprNode(1, 3)
                                                                         )
                                                      )
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "+="),
                                                        new ArithmExprNode(1,
                                                                           new IdNode(1, "x"),
                                                                           ArithmOpNode.FromSymbol(1, "+"),
                                                                           new LitExprNode(1, 4)
                                                                           )
                                                        )
                                     )
                    )
                );

            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "+="),
                                                        new IdNode(1, "y")
                                                        )
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "-="),
                                                        new UnaryExprNode(1,
                                                                          UnaryOpNode.FromSymbol(1, "-"),
                                                                          new IdNode(1, "y")
                                                                          )
                                                        )
                                     )
                    )
                );

            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "+="),
                                                        new IdNode(1, "y")
                                                        )
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new ExprListNode(1,
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "+="),
                                                                         new UnaryExprNode(1,
                                                                                           UnaryOpNode.FromSymbol(1, "-"),
                                                                                           new IdNode(1, "y")
                                                                                           )
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "y"),
                                                                         AssignOpNode.FromSymbol(1, "+="),
                                                                         new LitExprNode(1, 1)
                                                                         )
                                                      )
                                     )
                    ),
                new MatchIssues()
                .AddError(new BlockEndValueMismatchError("x", 1, "2", "0"))
                .AddError(new BlockEndValueMismatchError("y", 1, "1", "2"))
                );
        }
コード例 #9
0
        public void MultipleVariableAssignmentTests()
        {
            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new ExprListNode(1,
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 2)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 3)
                                                                         )
                                                      )
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "="),
                                                        new ArithmExprNode(1,
                                                                           new IdNode(1, "x"),
                                                                           ArithmOpNode.FromSymbol(1, "+"),
                                                                           new LitExprNode(1, 2)
                                                                           )
                                                        )
                                     )
                    )
                );

            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new ExprListNode(1,
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 2)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 3)
                                                                         )
                                                      )
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new ExprStatNode(1,
                                     new AssignExprNode(1,
                                                        new IdNode(1, "x"),
                                                        AssignOpNode.FromSymbol(1, "="),
                                                        new ArithmExprNode(1,
                                                                           new IdNode(1, "x"),
                                                                           ArithmOpNode.FromSymbol(1, "+"),
                                                                           new LitExprNode(1, 1)
                                                                           )
                                                        )
                                     )
                    ),
                new MatchIssues()
                .AddError(new BlockEndValueMismatchError("x", 1, "3", "2"))
                );

            this.Compare(
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 2)))
                                     )
                    ),
                new SourceNode(
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "x"), new LitExprNode(1, 1)))
                                     ),
                    new DeclStatNode(1,
                                     new DeclSpecsNode(1, "int"),
                                     new DeclListNode(1, new VarDeclNode(1, new IdNode(1, "y"), new LitExprNode(1, 2)))
                                     ),
                    new ExprStatNode(1,
                                     new ExprListNode(1,
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 2)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "x"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 1)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "y"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 1)
                                                                         ),
                                                      new AssignExprNode(1,
                                                                         new IdNode(1, "y"),
                                                                         AssignOpNode.FromSymbol(1, "="),
                                                                         new LitExprNode(1, 2)
                                                                         )
                                                      )
                                     )
                    )
                );
        }