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