public override BaseNode VisitFunction(QueryFilteringParser.FunctionContext context) { var parameters = context.atom().Select(x => x.Accept(this)).ToArray(); switch (context.value.Type) { case QueryFilteringParser.TOUPPER: return(new ToUpperNode(parameters)); case QueryFilteringParser.TOLOWER: return(new ToLowerNode(parameters)); case QueryFilteringParser.STARTSWITH: return(new StartsWithNode(parameters)); case QueryFilteringParser.ENDSWITH: return(new EndsWithNode(parameters)); default: throw new ParseRuleException( nameof(FilterExpressionVisitor), $"неизвестный тип функции '{context.value.Type}'"); } }
/// <summary> /// Visit a parse tree produced by <see cref="QueryFilteringParser.function"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitFunction([NotNull] QueryFilteringParser.FunctionContext context) { return(VisitChildren(context)); }