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); }
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(); } }