public override object VisitExpr(ExpressionParser.ExprContext context)
        {
            if ((context.DEBUG() != null) && (Debugger.IsAttached))
            {
                Debugger.Break();
            }
            var result = Visit(context.form());

            if (unit != null)
            {
                if (unit != "")
                {
                    if (!(result is NumericValue))
                    {
                        throw new Exception("Cannot change units on non-numeric result");
                    }
                    if ((result as NumericValue).Units.HasUnits)
                    {
                        result = (result as NumericValue).ConvertUnits(new ExpressionUnits(unit)).StripUnits();
                    }
                }
                else if (result is NumericValue)
                {
                    result = (result as NumericValue).StripUnits();
                }
            }
            return(Simplify(result));
        }
Example #2
0
        public NEExpression(string expression)
        {
            this.expression = expression;

            try { tree = ParserHelper.Parse <ExpressionLexer, ExpressionParser, ExpressionParser.ExprContext>(expression, parser => parser.expr(), true); }
            catch (Exception ex) { throw new Exception("Invalid expression", ex); }
        }
Example #3
0
 public override IExpression <T> VisitExpr(ExpressionParser.ExprContext context)
 {
     return(Visit(context.GetChild(0)));
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="ExpressionParser.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([NotNull] ExpressionParser.ExprContext context)
 {
     return(VisitChildren(context));
 }