Ejemplo n.º 1
0
        public UstNode VisitFunctionExpression([NotNull] DslParser.FunctionExpressionContext context)
        {
            var body = new PatternStatements(
                new Statement[] { new ExpressionStatement((Expression)VisitExpression(context.expression())) });

            return(new AnonymousMethodExpression(new ParameterDeclaration[0], body, context.GetTextSpan(), null));
        }
Ejemplo n.º 2
0
        public override UstNode Visit(PatternStatements patternStatements)
        {
            // ... ... ... -> ...
            List <Statement> collection = patternStatements.Statements
                                          .Select(item => (Statement)Visit(item)).ToList();
            int index = 0;

            while (index < collection.Count)
            {
                if (collection[index].NodeType == NodeType.PatternMultipleStatements &&
                    index + 1 < collection.Count &&
                    collection[index + 1].NodeType == NodeType.PatternMultipleStatements)
                {
                    collection.RemoveAt(index);
                }
                else
                {
                    index++;
                }
            }
            var result = new PatternStatements
            {
                Statements = new List <Statement>(collection)
            };

            return(result);
        }
Ejemplo n.º 3
0
        public void Preprocess_MultiMultiPattern_RemovedDuplicates()
        {
            UstNode patternWithDuplicateMultiStatementsExpressions = new PatternStatements
            {
                Statements = new List <Statement>()
                {
                    new ExpressionStatement(
                        new InvocationExpression
                    {
                        Target    = new IdToken("test_call"),
                        Arguments = new PatternExpressions
                        {
                            Collection = new List <Expression>
                            {
                                new IdToken("a"),
                                new IdToken("b"),
                                new PatternMultipleExpressions(),
                                new PatternMultipleExpressions(),
                                new IdToken("z")
                            }
                        }
                    }),

                    new PatternMultipleStatements(),
                    new PatternMultipleStatements(),

                    new ExpressionStatement(
                        new VariableDeclarationExpression
                    {
                        Type      = new TypeToken("int"),
                        Variables = new List <AssignmentExpression>()
                        {
                            new AssignmentExpression
                            {
                                Left  = new IdToken("a"),
                                Right = new IntLiteral {
                                    Value = 42
                                }
                            }
                        }
                    }
                        )
                }
            };
            var             logger       = new LoggerMessageCounter();
            var             processor    = new DslProcessor();
            UstPreprocessor preprocessor = new UstPreprocessor()
            {
                Logger = logger
            };
            UstNode result = preprocessor.Preprocess(patternWithDuplicateMultiStatementsExpressions);

            Assert.AreEqual(1, result.GetAllDescendants().Count(child => child.NodeType == NodeType.PatternMultipleStatements));
            Assert.AreEqual(1, result.GetAllDescendants().Count(child => child.NodeType == NodeType.PatternMultipleExpressions));
        }
Ejemplo n.º 4
0
        public UstNode VisitDslCode(DslParser.DslCodeContext context)
        {
            UstNode result;

            if (context.statement().Length > 0)
            {
                Statement[] statements = context.statement().Select(statement =>
                                                                    (Statement)VisitStatement(statement))
                                         .Where(statement => statement.NodeType != NodeType.PatternMultipleStatements).ToArray();
                var resultStatements = new List <Statement>();
                foreach (var statement in statements)
                {
                    resultStatements.Add(statement);
                    resultStatements.Add(new PatternMultipleStatements());
                }
                if (resultStatements.Count == 0)
                {
                    resultStatements.Add(new PatternMultipleStatements());
                }
                else
                {
                    resultStatements.RemoveAt(resultStatements.Count - 1);
                }
                result = new PatternStatements
                {
                    Statements = resultStatements,
                    TextSpan   = context.GetTextSpan()
                };
            }
            else if (context.expression() != null)
            {
                result = VisitExpression(context.expression());
            }
            else
            {
                PatternComment[] patternComments = context.PatternString().Select(literal =>
                                                                                  new PatternComment(RemoveQuotes(literal.GetText()), literal.GetTextSpan())).ToArray();
                if (patternComments.Length == 1)
                {
                    result = patternComments[0];
                }
                else
                {
                    result = new PatternVarDef(GetNewVarDefName(), patternComments, context.GetTextSpan());
                }
            }
            return(result);
        }
Ejemplo n.º 5
0
        public void Simplify_MultiMultiPattern_RemovedDuplicates()
        {
            var input = new PatternStatements
            {
                Statements = new List <PatternUst>()
                {
                    new PatternInvocationExpression
                    {
                        Target    = new PatternIdToken("test_call"),
                        Arguments = new PatternArgs
                                    (
                            new PatternIdToken("a"),
                            new PatternIdToken("b"),
                            new PatternMultipleExpressions(),
                            new PatternMultipleExpressions(),
                            new PatternIdToken("z")
                                    )
                    },

                    new PatternVarOrFieldDeclaration
                    {
                        Type       = new PatternIdToken("int"),
                        Assignment = new PatternAssignmentExpression
                        {
                            Left  = new PatternIdToken("a"),
                            Right = new PatternIntLiteral(42)
                        }
                    }
                }
            };
            var logger     = new LoggerMessageCounter();
            var processor  = new DslProcessor();
            var normalizer = new PatternNormalizer()
            {
                Logger = logger
            };
            PatternUst result = normalizer.Visit(input);

            var statements = ((PatternStatements)result).Statements;
            var invocation = (PatternInvocationExpression)statements.ElementAt(0);

            Assert.AreEqual(1, ((PatternArgs)invocation.Arguments).Args.Count(child => child is PatternMultipleExpressions));
        }
Ejemplo n.º 6
0
        public PatternUst VisitDslCode(DslParser.DslCodeContext context)
        {
            PatternUst result;

            if (context.statement().Length > 0)
            {
                List <PatternUst> statements = context.statement().Select(
                    statement => VisitStatement(statement))
                                               .Where(statement => statement != null).ToList();
                if (statements.Count == 1)
                {
                    result = statements.First();
                }
                else
                {
                    result = new PatternStatements(statements)
                    {
                        TextSpan = context.GetTextSpan()
                    };
                }
            }
            else if (context.expression() != null)
            {
                result = VisitExpression(context.expression());
            }
            else
            {
                IEnumerable <PatternCommentRegex> patternComments = context.PatternString().Select(literal =>
                                                                                                   new PatternCommentRegex(RemoveQuotes(literal.GetText()), literal.GetTextSpan()));
                if (patternComments.Count() == 1)
                {
                    result = patternComments.ElementAt(0);
                }
                else
                {
                    result = new PatternOr(patternComments, context.GetTextSpan());
                }
            }
            return(result);
        }
Ejemplo n.º 7
0
 public virtual T Visit(PatternStatements patternStatements)
 {
     return(VisitChildren(patternStatements));
 }
Ejemplo n.º 8
0
 public virtual void Exit(PatternStatements patternStatements)
 {
 }
Ejemplo n.º 9
0
 public virtual void Enter(PatternStatements patternStatements)
 {
 }