public override object VisitUnaryPrefixExpression([NotNull] DoshikParser.UnaryPrefixExpressionContext context)
        {
            SetWholeExpression(context);
            VisitChildren(context);
            _compilationContext.SetParsingAntlrContext(context);

            var node = new UnaryPrefixExpressionNode(context);

            node.Expression = Sequence.FindExpressionByAntlrContext(context.expression());

            if (context.prefix.Type == DoshikParser.ADD)
            {
                node.Prefix = UnaryPrefixExpressionNode.PrefixOption.Plus;
            }
            else if (context.prefix.Type == DoshikParser.SUB)
            {
                node.Prefix = UnaryPrefixExpressionNode.PrefixOption.Minus;
            }
            else if (context.prefix.Type == DoshikParser.INC)
            {
                node.Prefix = UnaryPrefixExpressionNode.PrefixOption.Increment;
            }
            else if (context.prefix.Type == DoshikParser.DEC)
            {
                node.Prefix = UnaryPrefixExpressionNode.PrefixOption.Decrement;
            }
            else
            {
                throw new System.NotImplementedException();
            }

            Sequence.Sequence.Add(node);

            return(null);
        }
Пример #2
0
        private IExpression HandleUnaryPrefixExpressionNode(UnaryPrefixExpressionNode node)
        {
            switch (node.Prefix)
            {
            case UnaryPrefixExpressionNode.PrefixOption.Minus:
                return(CreateStaticMethodCallExpressionForUnaryOperator("op_UnaryMinus", node.Expression));

            case UnaryPrefixExpressionNode.PrefixOption.Plus:
                // В случае операции унарного плюса возвращаем исходное выражение всегда (то есть плюс без последствий можно применить к чему угодно)
                return(FindExpressionByExpressionNode(node.Expression, false));

            // ToDo: Increment, Decrement

            default:
                throw new NotImplementedException();
            }
        }