Example #1
0
        public override ExprNode VisitFuncExpr(ExprParser.FuncExprContext context)
        {
            var funcName = context.func.Text;
            var func     = typeof(Math)
                           .GetMethods(BindingFlags.Public | BindingFlags.Static)
                           .Where(m => m.ReturnType == typeof(double))
                           .Where(m => m.GetParameters().Select(p => p.ParameterType).SequenceEqual(new[] { typeof(double) }))
                           .FirstOrDefault(m => m.Name.Equals(funcName, StringComparison.OrdinalIgnoreCase));

            if (func == null)
            {
                throw new NotSupportedException($"Function {funcName} is not supported!");
            }
            return(new FuncNode()
            {
                Function = (Func <double, double>)func.CreateDelegate(typeof(Func <double, double>)),
                Argument = Visit(context.expr()),
                FName = funcName,
            });
        }
Example #2
0
        public override AstNode VisitFuncExpr(ExprParser.FuncExprContext context)
        {
            if (context == null)
            {
                throw new ArgumentException("Error at func expr");
            }

            AstNode.FuncNode node = new AstNode.FuncNode();
            //{
            //    FuncName = context.func.Text,
            //    Arguments = Visit(context.args) as AstNode.FuncArgs,
            //};

            node.FuncName = context.func.Text;
            if (context.args == null)
            {
                throw new ArgumentException("No arguments provided!");
            }
            node.Arguments = Visit(context.args) as AstNode.FuncArgs;

            return(node);
        }
Example #3
0
 /// <summary>
 /// Exit a parse tree produced by the <c>funcExpr</c>
 /// labeled alternative in <see cref="ExprParser.expr"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitFuncExpr([NotNull] ExprParser.FuncExprContext context)
 {
 }
Example #4
0
 /// <summary>
 /// Visit a parse tree produced by the <c>funcExpr</c>
 /// labeled alternative in <see cref="ExprParser.expr"/>.
 /// <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 VisitFuncExpr([NotNull] ExprParser.FuncExprContext context)
 {
     return(VisitChildren(context));
 }