private Expression VisitComparisonExpression(IToken operationToken, VelocityParser.ExpressionContext left, VelocityParser.ExpressionContext right, VelocityParser.ExpressionContext context)
        {
            VelocityOperator operation;

            switch (operationToken.Type)
            {
            case VelocityLexer.LessThan:
                operation = VelocityOperator.LessThan;
                break;

            case VelocityLexer.GreaterThan:
                operation = VelocityOperator.GreaterThan;
                break;

            case VelocityLexer.LessThanOrEqual:
                operation = VelocityOperator.LessThanOrEqual;
                break;

            case VelocityLexer.GreaterThanOrEqual:
                operation = VelocityOperator.GreaterThanOrEqual;
                break;

            case VelocityLexer.Equal:
                operation = VelocityOperator.Equal;
                break;

            case VelocityLexer.NotEqual:
                operation = VelocityOperator.NotEqual;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(operationToken));
            }

            var visitedLeft  = Visit(left);
            var visitedRight = Visit(right);
            var sourceInfo   = GetSourceInfo(context);

            return(_expressionFactory.Binary(visitedLeft, visitedRight, sourceInfo, operation));
        }
        private Expression VisitMathematicalExpression(IToken operationToken, VelocityParser.ExpressionContext left, VelocityParser.ExpressionContext right, VelocityParser.ExpressionContext context)
        {
            VelocityOperator operation;

            switch (operationToken.Type)
            {
            case VelocityLexer.Plus:
                operation = VelocityOperator.Add;
                break;

            case VelocityLexer.Minus:
                operation = VelocityOperator.Subtract;
                break;

            case VelocityLexer.Multiply:
                operation = VelocityOperator.Multiply;
                break;

            case VelocityLexer.Divide:
                operation = VelocityOperator.Divide;
                break;

            case VelocityLexer.Modulo:
                operation = VelocityOperator.Modulo;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(operationToken));
            }

            var visitedLeft  = Visit(left);
            var visitedRight = Visit(right);
            var sourceInfo   = GetSourceInfo(context);

            return(_expressionFactory.Binary(visitedLeft, visitedRight, sourceInfo, operation));
        }
 public Expression VisitExpression([NotNull] VelocityParser.ExpressionContext context)
 {
     throw new NotImplementedException();
 }