//独自関数の計算 public override Result VisitExpr_funccall([NotNull] calcParser.Expr_funccallContext context) { var(argSuc, argType, argValue) = Visit(context._args[0]); if (!argSuc) { return(DefaultResult); } if (context.funcname.Text.ToUpper() == "SIN") { return(new Result(true, CalcRule.CalcReal, (float)Math.Sin(GetValFloat(argType, argValue) * (Math.PI / 180)))); } if (context.funcname.Text.ToUpper() == "LEN") { string str = (string)argValue; return(new Result(true, CalcRule.CalcInt, str.Length)); } else { Debug.Assert(false); return(DefaultResult); } }
/// <summary> /// Visit a parse tree produced by the <c>expr_funccall</c> /// labeled alternative in <see cref="calcParser.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 VisitExpr_funccall([NotNull] calcParser.Expr_funccallContext context) { return(VisitChildren(context)); }