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); }
/// <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)); }