public override Expression VisitRelationalExpression([NotNull] RuleEngineParser.RelationalExpressionContext context) { var leftExpression = VisitAdditiveExpression(context.additiveExpression(0)); for (int i = 1; i < context.ChildCount; i += 2) { var operatorSign = context.GetChild(i).GetText(); var rightExpression = VisitAdditiveExpression((RuleEngineParser.AdditiveExpressionContext)context.GetChild(i + 1)); ExpressionType expressionType; switch (operatorSign) { case ">": expressionType = ExpressionType.GreaterThan; break; case "<": expressionType = ExpressionType.LessThan; break; case ">=": expressionType = ExpressionType.GreaterThanOrEqual; break; case "<=": expressionType = ExpressionType.LessThanOrEqual; 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.relationalExpression"/>. /// <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 VisitRelationalExpression([NotNull] RuleEngineParser.RelationalExpressionContext context) { return(VisitChildren(context)); }