Ejemplo n.º 1
0
        private IExpression HandleRelativeExpressionNode(RelativeExpressionNode node)
        {
            switch (node.Operator)
            {
            case RelativeExpressionNode.OperatorOption.Greater:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_GreaterThan", node.Left, node.Right));

            case RelativeExpressionNode.OperatorOption.Lesser:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_LessThan", node.Left, node.Right));

            case RelativeExpressionNode.OperatorOption.GreaterOrEquals:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_GreaterThanOrEqual", node.Left, node.Right));

            case RelativeExpressionNode.OperatorOption.LesserOrEquals:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_LessThanOrEqual", node.Left, node.Right));

            default:
                throw new NotImplementedException();
            }
        }
        public override object VisitRelativeExpression([NotNull] DoshikParser.RelativeExpressionContext context)
        {
            SetWholeExpression(context);
            VisitChildren(context);
            _compilationContext.SetParsingAntlrContext(context);

            var node = new RelativeExpressionNode(context);

            node.Left  = Sequence.FindExpressionByAntlrContext(context.left);
            node.Right = Sequence.FindExpressionByAntlrContext(context.right);

            if ([email protected] == DoshikParser.LE)
            {
                node.Operator = RelativeExpressionNode.OperatorOption.LesserOrEquals;
            }
            else if ([email protected] == DoshikParser.GE)
            {
                node.Operator = RelativeExpressionNode.OperatorOption.GreaterOrEquals;
            }
            else if ([email protected] == DoshikParser.LT)
            {
                node.Operator = RelativeExpressionNode.OperatorOption.Lesser;
            }
            else if ([email protected] == DoshikParser.GT)
            {
                node.Operator = RelativeExpressionNode.OperatorOption.Greater;
            }
            else
            {
                throw new System.NotImplementedException();
            }

            Sequence.Sequence.Add(node);

            return(null);
        }