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)); }
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); }
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)); }
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 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)); }
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); }
public virtual T Visit(PatternStatements patternStatements) { return(VisitChildren(patternStatements)); }
public virtual void Exit(PatternStatements patternStatements) { }
public virtual void Enter(PatternStatements patternStatements) { }