Beispiel #1
0
 public TreeToNFAConverter(Grammar g, NFA nfa, NFAFactory factory, ITreeNodeStream input)
     : this( input )
 {
     this.grammar = g;
     this.nfa     = nfa;
     this.factory = factory;
 }
        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);
            }
        }
 public TreeToNFAConverter( Grammar g, NFA nfa, NFAFactory factory, ITreeNodeStream input )
     : this(input)
 {
     this.grammar = g;
     this.nfa = nfa;
     this.factory = factory;
 }
        public void testBufferOverflow()
        {
            StringBuilder buf  = new StringBuilder();
            StringBuilder buf2 = new StringBuilder();
            // make ^(101 102 ... n)
            ITree t = new CommonTree(new CommonToken(101));

            buf.Append(" 101");
            buf2.Append(" 101");
            buf2.Append(" ");
            buf2.Append(Token.DOWN);
            for (int i = 0; i <= UnBufferedTreeNodeStream.INITIAL_LOOKAHEAD_BUFFER_SIZE + 10; i++)
            {
                t.AddChild(new CommonTree(new CommonToken(102 + i)));
                buf.Append(" ");
                buf.Append(102 + i);
                buf2.Append(" ");
                buf2.Append(102 + i);
            }
            buf2.Append(" ");
            buf2.Append(Token.UP);

            ITreeNodeStream stream    = CreateUnBufferedTreeNodeStream(t);
            String          expecting = buf.ToString();
            String          found     = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expecting, found);

            expecting = buf2.ToString();
            found     = stream.ToString();
            Assert.AreEqual(expecting, found);
        }
 public DebugTreeNodeStream(ITreeNodeStream input, IDebugEventListener dbg)
 {
     this.input = input;
     this.adaptor = input.TreeAdaptor;
     this.input.HasUniqueNavigationNodes = true;
     SetDebugListener(dbg);
 }
 public DebugTreeNodeStream(ITreeNodeStream input, IDebugEventListener dbg)
 {
     this.input   = input;
     this.adaptor = input.TreeAdaptor;
     this.input.HasUniqueNavigationNodes = true;
     SetDebugListener(dbg);
 }
 public ElementFrequenciesVisitor(Grammar grammar, ITreeNodeStream input)
     : base(input)
 {
     this.grammar = grammar;
     frequencies  = new Stack <FrequencySet <string> >();
     frequencies.Push(new FrequencySet <string>());
     minFrequencies = new Stack <FrequencySet <string> >();
     minFrequencies.Push(SENTINEL);
 }
 public ElementFrequenciesVisitor(Grammar grammar, ITreeNodeStream input)
     : base(input)
 {
     this.grammar = grammar;
     frequencies = new Stack<FrequencySet<string>>();
     frequencies.Push(new FrequencySet<string>());
     minFrequencies = new Stack<FrequencySet<string>>();
     minFrequencies.Push(SENTINEL);
 }
        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 testSingleNode()
        {
            ITree t = new CommonTree(new CommonToken(101));

            ITreeNodeStream stream   = CreateCommonTreeNodeStream(t);
            string          expected = " 101";
            string          actual   = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expected, actual);

            expected = " 101";
            actual   = stream.ToString();
            Assert.AreEqual(expected, actual);
        }
 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());
        }
        public void testAoverB()
        {
            ITree t = new CommonTree(new CommonToken(101));

            t.AddChild(new CommonTree(new CommonToken(102)));

            ITreeNodeStream stream   = CreateBufferedTreeNodeStream(t);
            string          expected = " 101 102";
            string          actual   = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expected, actual);

            expected = " 101 2 102 3";
            actual   = stream.ToString();
            Assert.AreEqual(expected, actual);
        }
        /// <summary>
        /// Test a tree with four nodes - ^(101 ^(102 103) 104)
        /// </summary>
        public void test4Nodes()
        {
            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);
            string          expected = " 101 102 103 104";
            string          actual   = GetStringOfEntireStreamContentsWithNodeTypesOnly(stream);

            Assert.AreEqual(expected, actual);

            expected = " 101 2 102 2 103 3 104 3";
            actual   = stream.ToString();
            Assert.AreEqual(expected, actual);
        }
        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);
        }
Beispiel #16
0
 /** <summary>
  *  Create a normal parser except wrap the token stream in a debug
  *  proxy that fires consume events.
  *  </summary>
  */
 public DebugTreeParser(ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state)
     : base(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, dbg), state)
 {
     SetDebugListener(dbg);
 }
 public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input, Exception innerException)
     : base(message, input, innerException)
 {
     this._expecting = expecting;
 }
 public MismatchedTreeNodeException(int expecting, ITreeNodeStream input)
     : base(input)
 {
     this._expecting = expecting;
 }
Beispiel #19
0
 public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg )
     : this(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), dbg, null)
 {
 }
Beispiel #20
0
 public DebugTreeParser( ITreeNodeStream input, RecognizerSharedState state )
     : base(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, null ), state)
 {
 }
Beispiel #21
0
 /** <summary>
  *  Create a normal parser except wrap the token stream in a debug
  *  proxy that fires consume events.
  *  </summary>
  */
 public DebugTreeParser( ITreeNodeStream input, IDebugEventListener dbg, RecognizerSharedState state )
     : base(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream( input, dbg ), state)
 {
     SetDebugListener(dbg);
 }
Beispiel #22
0
 public DebugTreeParser(ITreeNodeStream input, RecognizerSharedState state)
     : base(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, null), state)
 {
 }
 public MismatchedTreeNodeException(string message, int expecting, ITreeNodeStream input, Exception innerException)
     : base(message, input, innerException)
 {
     this._expecting = expecting;
 }
Beispiel #24
0
 public DebugTreeParser(ITreeNodeStream input, IDebugEventListener dbg)
     : this(input is DebugTreeNodeStream ? input : new DebugTreeNodeStream(input, dbg), dbg, null)
 {
 }
 public MismatchedTreeNodeException( int expecting, ITreeNodeStream input )
     : base(input)
 {
     this._expecting = expecting;
 }