public AssignmentNode Walk()
        {
            var key = new PrimaryTranslator(node.GetChild(0)).Walk();
            var value = new TranslationTranslator(node.GetChild(1)).Walk();

            switch ((JavaNodeType)node.Type)
            {
                case JavaNodeType.ASSIGN:
                    return new AssignmentNode.NormalAssignNode { Left = key, Right = value };
                case JavaNodeType.PLUS_ASSIGN:
                    return new AssignmentNode.AddAssignNode { Left = key, Right = value };
                case JavaNodeType.MINUS_ASSIGN:
                    return new AssignmentNode.MinusAssignNode { Left = key, Right = value };
                case JavaNodeType.STAR_ASSIGN:
                    return new AssignmentNode.MultiplyAssignNode { Left = key, Right = value };
                case JavaNodeType.DIV_ASSIGN:
                    return new AssignmentNode.DivideAssignNode { Left = key, Right = value };
                case JavaNodeType.MOD_ASSIGN:
                    return new AssignmentNode.ModAssignNode { Left = key, Right = value };
                default:
                    throw new NotImplementedException();
            }
        }
Ejemplo n.º 2
0
        private PrimaryNode WalkMethodCall()
        {
            PrimaryNode key = new PrimaryTranslator(node.GetChild(0)).Walk();
            var arguments = new List<TranslateNode>();

            ITree argumentList = node.GetChild(1);
            for (int i = 0; i < argumentList.ChildCount; i++)
            {
                arguments.Add(new TranslationTranslator(argumentList.GetChild(i)).Walk());
            }

            PrimaryNode.TermMethodExpression meth;
            if (key is PrimaryNode.TermIdentifierExpression)
            {
                var id = key as PrimaryNode.TermIdentifierExpression;

                meth = new PrimaryNode.TermMethodExpression { Identifier = id.Identifier };

                key = meth;
            }
            else if (key is PrimaryNode.TermFieldExpression)
            {
                var field = key as PrimaryNode.TermFieldExpression;
                var id = field.SecondChild as PrimaryNode.TermIdentifierExpression;

                meth = new PrimaryNode.TermMethodExpression { Identifier = id.Identifier };

                key = new PrimaryNode.TermFieldExpression
                {
                    Child = field.Child,
                    SecondChild = meth
                };
            }
            else
            {
                throw new NotImplementedException();
            }

            meth.Arguments = arguments;

            return key;
        }