Esempio n. 1
0
        public override Expression VisitEqualityExpression([NotNull] RuleEngineParser.EqualityExpressionContext context)
        {
            var leftExpression = VisitRelationalExpression(context.relationalExpression(0));

            for (int i = 1; i < context.ChildCount; i += 2)
            {
                var operatorSign    = context.GetChild(i).GetText();
                var rightExpression = VisitRelationalExpression((RuleEngineParser.RelationalExpressionContext)context.GetChild(i + 1));

                ExpressionType expressionType;
                switch (operatorSign)
                {
                case "==":
                    expressionType = ExpressionType.Equal;
                    break;

                case "!=":
                    expressionType = ExpressionType.NotEqual;
                    break;

                default:
                    throw new NotSupportedException($"Not support operator '{operatorSign}'.");
                }

                (leftExpression, rightExpression) = Convert(leftExpression, rightExpression);
                leftExpression = Expression.MakeBinary(expressionType, leftExpression, rightExpression);
            }
            return(leftExpression);
        }
Esempio n. 2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="RuleEngineParser.equalityExpression"/>.
 /// <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 VisitEqualityExpression([NotNull] RuleEngineParser.EqualityExpressionContext context)
 {
     return(VisitChildren(context));
 }