public void testBufferWrap()
        {
            int N = 10;
            // make tree with types: 1 2 ... INITIAL_LOOKAHEAD_BUFFER_SIZE+N
            ITree t = new CommonTree((IToken)null);

            for (int i = 0; i < UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + N; i++)
            {
                t.AddChild(new CommonTree(new CommonToken(i + 1)));
            }

            // move head to index N
            ITreeNodeStream stream = CreateUnBufferedTreeNodeStream(t);

            for (int i = 1; i <= N; i++)
            {             // consume N
                ITree node = (ITree)stream.LT(1);
                Assert.AreEqual(i, node.Type);
                stream.Consume();
            }

            // now use LT to lookahead past end of buffer
            int remaining = UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE - N;
            int wrapBy    = 4;          // wrap around by 4 nodes

            Assert.IsTrue(wrapBy < N, "bad test code; wrapBy must be less than N");
            for (int i = 1; i <= remaining + wrapBy; i++)
            {                                     // wrap past end of buffer
                ITree node = (ITree)stream.LT(i); // look ahead to ith token
                Assert.AreEqual(N + i, node.Type);
            }
        }
Exemplo n.º 2
0
        public void Consume()
        {
            object node = input.LT(1);

            input.Consume();
            dbg.ConsumeNode(node);
        }
Exemplo n.º 3
0
        protected void ExtractInformationFromTreeNodeStream(IIntStream input)
        {
            ITreeNodeStream nodes = (ITreeNodeStream)input;

            this.node = nodes.LT(1);
            ITreeAdaptor adaptor = nodes.TreeAdaptor;
            IToken       payload = adaptor.GetToken(node);

            if (payload != null)
            {
                this.token = payload;
                if (payload.Line <= 0)
                {
                    // imaginary node; no line/pos info; scan backwards
                    int    i         = -1;
                    object priorNode = nodes.LT(i);
                    while (priorNode != null)
                    {
                        IToken priorPayload = adaptor.GetToken(priorNode);
                        if ((priorPayload != null) && (priorPayload.Line > 0))
                        {
                            // we found the most recent real line / pos info
                            this.line = priorPayload.Line;
                            this.charPositionInLine  = priorPayload.CharPositionInLine;
                            this.approximateLineInfo = true;
                            break;
                        }
                        --i;
                        priorNode = nodes.LT(i);
                    }
                }
                else
                {
                    // node created from real token
                    this.line = payload.Line;
                    this.charPositionInLine = payload.CharPositionInLine;
                }
            }
            else if (this.node is ITree)
            {
                this.line = ((ITree)this.node).Line;
                this.charPositionInLine = ((ITree)this.node).CharPositionInLine;
                if (this.node is CommonTree)
                {
                    this.token = ((CommonTree)this.node).Token;
                }
            }
            else
            {
                int    type = adaptor.GetNodeType(this.node);
                string text = adaptor.GetNodeText(this.node);
                this.token = new CommonToken(type, text);
            }
        }
        public void testLT()
        {
            // ^(101 ^(102 103) 104)
            ITree t = new CommonTree(new CommonToken(101));

            t.AddChild(new CommonTree(new CommonToken(102)));
            t.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
            t.AddChild(new CommonTree(new CommonToken(104)));

            ITreeNodeStream stream = CreateCommonTreeNodeStream(t);

            Assert.AreEqual(101, ((ITree)stream.LT(1)).Type);
            Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(2)).Type);
            Assert.AreEqual(102, ((ITree)stream.LT(3)).Type);
            Assert.AreEqual(Token.DOWN, ((ITree)stream.LT(4)).Type);
            Assert.AreEqual(103, ((ITree)stream.LT(5)).Type);
            Assert.AreEqual(Token.UP, ((ITree)stream.LT(6)).Type);
            Assert.AreEqual(104, ((ITree)stream.LT(7)).Type);
            Assert.AreEqual(Token.UP, ((ITree)stream.LT(8)).Type);
            Assert.AreEqual(Token.EOF, ((ITree)stream.LT(9)).Type);
            // check way ahead
            Assert.AreEqual(Token.EOF, ((ITree)stream.LT(100)).Type);
        }
 public string GetStringOfEntireStreamContentsWithNodeTypesOnly(ITreeNodeStream nodes)
 {
     StringBuilder buf = new StringBuilder();
     for (int i = 0; i < nodes.Size(); i++)
     {
         object t = nodes.LT(i + 1);
         int type = nodes.TreeAdaptor.GetNodeType(t);
         if (!((type == Token.DOWN) || (type == Token.UP)))
         {
             buf.Append(" ");
             buf.Append(type);
         }
     }
     return buf.ToString();
 }
        public string GetStringOfEntireStreamContentsWithNodeTypesOnly(ITreeNodeStream nodes)
        {
            StringBuilder buf = new StringBuilder();

            for (int i = 0; i < nodes.Size(); i++)
            {
                object t    = nodes.LT(i + 1);
                int    type = nodes.TreeAdaptor.GetNodeType(t);
                if (!((type == Token.DOWN) || (type == Token.UP)))
                {
                    buf.Append(" ");
                    buf.Append(type);
                }
            }
            return(buf.ToString());
        }