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