// (- 123)の計算 public override Result VisitExpr_unary([NotNull] calcParser.Expr_unaryContext context) { var(Suc, type, value) = base.VisitExpr_unary(context); if (!Suc) { return(DefaultResult); } try { checked { switch (context.op.Type) { case calcParser.PLUS: return(new Result(true, type, value)); case calcParser.MINUS: if (type == CalcRule.CalcInt) { return(new Result(true, type, GetValInt(type, value) * -1)); } else { return(new Result(true, type, GetValFloat(type, value) * -1)); } default: return(DefaultResult); } } } catch (OverflowException) { return(new Result(false, CalcRule.None, (int)ErrString.ErrID.OverFlow)); } }
/// <summary> /// Visit a parse tree produced by the <c>expr_unary</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_unary([NotNull] calcParser.Expr_unaryContext context) { return(VisitChildren(context)); }