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

            var node = new MultiplicationExpressionNode(context);

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

            if ([email protected] == DoshikParser.MUL)
            {
                node.Operator = MultiplicationExpressionNode.OperatorOption.Multiply;
            }
            else if ([email protected] == DoshikParser.DIV)
            {
                node.Operator = MultiplicationExpressionNode.OperatorOption.Divide;
            }
            else if ([email protected] == DoshikParser.MOD)
            {
                node.Operator = MultiplicationExpressionNode.OperatorOption.Mod;
            }
            else
            {
                throw new System.NotImplementedException();
            }

            Sequence.Sequence.Add(node);

            return(null);
        }
Exemplo n.º 2
0
        private IExpression HandleMultiplicationExpressionNode(MultiplicationExpressionNode node)
        {
            // ToDo: тут и в других перегрузках операторов: при формировании external api нужно бы разобрать методы по группам: Простой метод, конструктор, перегрузка оператора (+, - и тд)
            // тогда можно было бы тут искать не по имени метода а по группе и среди них уже искать перегрузки по типам параметров (причем тут бы тогда то статический метод или нет определялось бы
            // в зависимости от флага того метод статический или нет)

            switch (node.Operator)
            {
            case MultiplicationExpressionNode.OperatorOption.Multiply:
                // ToDo: для UnityEngine типов тут есть op_Multiply (надо поменяь методы чтобы мог принимать несколько методов и искал перегрузки во всех них)
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_Multiplication", node.Left, node.Right));

            case MultiplicationExpressionNode.OperatorOption.Divide:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_Division", node.Left, node.Right));

            case MultiplicationExpressionNode.OperatorOption.Mod:
                return(CreateStaticMethodCallExpressionForBinaryOperator("op_Remainder", node.Left, node.Right));

            default:
                throw new NotImplementedException();
            }
        }