public override void EnterSubexpression([NotNull] TxMarkParser.SubexpressionContext context)
        {
            var operatorType = GetOperatorType(context);

            _compileContext.Push(CodeContextTypes.BinaryExpression,
                                 attributes: new Bag <string>().Add <OperatorTypes>("operator", operatorType.Value)
                                 );
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="TxMarkParser.subexpression"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitSubexpression([NotNull] TxMarkParser.SubexpressionContext context)
 {
 }
Beispiel #3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="TxMarkParser.subexpression"/>.
 /// <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 VisitSubexpression([NotNull] TxMarkParser.SubexpressionContext context)
 {
     return(VisitChildren(context));
 }
 public override void ExitSubexpression([NotNull] TxMarkParser.SubexpressionContext context)
 {
     _compileContext.Pop();
 }
        private OperatorTypes?GetOperatorType(TxMarkParser.SubexpressionContext context)
        {
            var booleanOperator = context.booleanOperator();

            if (booleanOperator.OPERATOR_AND() != null)
            {
                return(OperatorTypes.And);
            }
            else if (booleanOperator.OPERATOR_OR() != null)
            {
                return(OperatorTypes.Or);
            }
            else if (booleanOperator.OPERATOR_GREATER_OR_EQUAL() != null)
            {
                return(OperatorTypes.GreaterOrEqual);
            }
            else if (booleanOperator.OPERATOR_GREATER_THAN() != null)
            {
                return(OperatorTypes.GreaterThan);
            }
            else if (booleanOperator.OPERATOR_IS() != null)
            {
                if (booleanOperator.OPERATOR_NOT() != null)
                {
                    return(OperatorTypes.IsNot);
                }
                else if (booleanOperator.OPERATOR_IN() != null)
                {
                    return(OperatorTypes.IsIn);
                }
                return(OperatorTypes.Is);
            }
            else if (booleanOperator.OPERATOR_CONTAINS() != null)
            {
                return(OperatorTypes.Contains);
            }
            else if (booleanOperator.OPERATOR_LESS_OR_EQUAL() != null)
            {
                return(OperatorTypes.LessOrEqual);
            }
            else if (booleanOperator.OPERATOR_LESS_THAN() != null)
            {
                return(OperatorTypes.LessThan);
            }
            else if (booleanOperator.OPERATOR_MINUS() != null)
            {
                return(OperatorTypes.Subtract);
            }
            else if (booleanOperator.OPERATOR_PLUS() != null)
            {
                return(OperatorTypes.Add);
            }
            else if (booleanOperator.OPERATOR_MULTIPLY() != null)
            {
                return(OperatorTypes.Multiply);
            }
            else if (booleanOperator.OPERATOR_MODULO() != null)
            {
                return(OperatorTypes.Modulo);
            }
            else if (booleanOperator.OPERATOR_DIVIDE() != null)
            {
                return(OperatorTypes.Divide);
            }
            else if (booleanOperator.OPERATOR_POWER() != null)
            {
                return(OperatorTypes.Power);
            }
            else
            {
                return(null);
            }
        }