예제 #1
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);
        }
예제 #2
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);
        }