public override Expression VisitMultiplicativeExpression([NotNull] RuleEngineParser.MultiplicativeExpressionContext context) { var leftExpression = VisitUnaryExpression(context.unaryExpression(0)); for (int i = 1; i < context.ChildCount; i += 2) { var operatorSign = context.GetChild(i).GetText(); var rightExpression = VisitUnaryExpression((RuleEngineParser.UnaryExpressionContext)context.GetChild(i + 1)); ExpressionType expressionType; switch (operatorSign) { case "*": expressionType = ExpressionType.Multiply; break; case "/": expressionType = ExpressionType.Divide; break; case "%": expressionType = ExpressionType.Modulo; 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.multiplicativeExpression"/>. /// <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 VisitMultiplicativeExpression([NotNull] RuleEngineParser.MultiplicativeExpressionContext context) { return(VisitChildren(context)); }