public override object VisitExprCompare([NotNull] MiniSQLParser.ExprCompareContext context) { Expression left = (Expression)Visit(context.expr(0)); Expression right = (Expression)Visit(context.expr(1)); Expression obj = new Expression(); obj.LeftOperand = left; obj.RightOperand = right; if (context.compOp().EQUAL_OPERATOR() != null) { obj.Operator = Operator.Equal; } else if (context.compOp().GREATER_OR_EQUAL_OPERATOR() != null) { obj.Operator = Operator.MoreThanOrEqualTo; } else if (context.compOp().GREATER_THAN_OPERATOR() != null) { obj.Operator = Operator.MoreThan; } else if (context.compOp().LESS_OR_EQUAL_OPERATOR() != null) { obj.Operator = Operator.LessThanOrEqualTo; } else if (context.compOp().LESS_THAN_OPERATOR() != null) { obj.Operator = Operator.LessThan; } else if (context.compOp().NOT_EQUAL_OPERATOR() != null) { obj.Operator = Operator.NotEqual; } else { throw new System.NotImplementedException(); } // optimize expression if (left.Operator == Operator.AtomConcreteValue && right.Operator == Operator.AtomConcreteValue) { left.ConcreteValue = obj.Calculate(null); return(left); } return(obj); }
/// <summary> /// Exit a parse tree produced by the <c>exprCompare</c> /// labeled alternative in <see cref="MiniSQLParser.expr"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitExprCompare([NotNull] MiniSQLParser.ExprCompareContext context) { }
/// <summary> /// Visit a parse tree produced by the <c>exprCompare</c> /// labeled alternative in <see cref="MiniSQLParser.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 VisitExprCompare([NotNull] MiniSQLParser.ExprCompareContext context) { return(VisitChildren(context)); }