⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testtree.py

📁 antlr最新版本V3源代码
💻 PY
📖 第 1 页 / 共 2 页
字号:
# -*- coding: utf-8 -*-import osimport unittestfrom StringIO import StringIOfrom antlr3.tree import CommonTreeNodeStream, CommonTreefrom antlr3 import CommonToken, UP, DOWN, EOFclass TestTreeNodeStream(unittest.TestCase):    """Test case for the TreeNodeStream class."""    def newStream(self, t):        """Build new stream; let's us override to test other streams."""        return CommonTreeNodeStream(t)    def testSingleNode(self):        t = CommonTree(CommonToken(101))        stream = self.newStream(t)        expecting = "101"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101"        found = str(stream)        self.failUnlessEqual(expecting, found)    def test4Nodes(self):        # ^(101 ^(102 103) 104)        t = CommonTree(CommonToken(101))        t.addChild(CommonTree(CommonToken(102)))        t.getChild(0).addChild(CommonTree(CommonToken(103)))        t.addChild(CommonTree(CommonToken(104)))        stream = self.newStream(t)        expecting = "101 102 103 104"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101 2 102 2 103 3 104 3"        found = str(stream)        self.failUnlessEqual(expecting, found)    def testList(self):        root = CommonTree(None)        t = CommonTree(CommonToken(101))        t.addChild(CommonTree(CommonToken(102)))        t.getChild(0).addChild(CommonTree(CommonToken(103)))        t.addChild(CommonTree(CommonToken(104)))        u = CommonTree(CommonToken(105))        root.addChild(t)        root.addChild(u)        stream = CommonTreeNodeStream(root)        expecting = "101 102 103 104 105"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101 2 102 2 103 3 104 3 105"        found = str(stream)        self.failUnlessEqual(expecting, found)    def testFlatList(self):        root = CommonTree(None)        root.addChild(CommonTree(CommonToken(101)))        root.addChild(CommonTree(CommonToken(102)))        root.addChild(CommonTree(CommonToken(103)))        stream = CommonTreeNodeStream(root)        expecting = "101 102 103"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101 102 103"        found = str(stream)        self.failUnlessEqual(expecting, found)    def testListWithOneNode(self):        root = CommonTree(None)        root.addChild(CommonTree(CommonToken(101)))        stream = CommonTreeNodeStream(root)        expecting = "101"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101"        found = str(stream)        self.failUnlessEqual(expecting, found)    def testAoverB(self):        t = CommonTree(CommonToken(101))        t.addChild(CommonTree(CommonToken(102)))        stream = self.newStream(t)        expecting = "101 102"        found = self.toNodesOnlyString(stream)        self.failUnlessEqual(expecting, found)        expecting = "101 2 102 3"        found = str(stream)        self.failUnlessEqual(expecting, found)    def testLT(self):        # ^(101 ^(102 103) 104)        t = CommonTree(CommonToken(101))        t.addChild(CommonTree(CommonToken(102)))        t.getChild(0).addChild(CommonTree(CommonToken(103)))        t.addChild(CommonTree(CommonToken(104)))        stream = self.newStream(t)        self.failUnlessEqual(101, stream.LT(1).getType())        self.failUnlessEqual(DOWN, stream.LT(2).getType())        self.failUnlessEqual(102, stream.LT(3).getType())        self.failUnlessEqual(DOWN, stream.LT(4).getType())        self.failUnlessEqual(103, stream.LT(5).getType())        self.failUnlessEqual(UP, stream.LT(6).getType())        self.failUnlessEqual(104, stream.LT(7).getType())        self.failUnlessEqual(UP, stream.LT(8).getType())        self.failUnlessEqual(EOF, stream.LT(9).getType())        # check way ahead        self.failUnlessEqual(EOF, stream.LT(100).getType())    def testMarkRewindEntire(self):        # ^(101 ^(102 103 ^(106 107) ) 104 105)        # stream has 7 real + 6 nav nodes        # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF        r0 = CommonTree(CommonToken(101))        r1 = CommonTree(CommonToken(102))        r0.addChild(r1)        r1.addChild(CommonTree(CommonToken(103)))        r2 = CommonTree(CommonToken(106))        r2.addChild(CommonTree(CommonToken(107)))        r1.addChild(r2)        r0.addChild(CommonTree(CommonToken(104)))        r0.addChild(CommonTree(CommonToken(105)))        stream = CommonTreeNodeStream(r0)        m = stream.mark() # MARK        for _ in range(13): # consume til end            stream.LT(1)            stream.consume()        self.failUnlessEqual(EOF, stream.LT(1).getType())        self.failUnlessEqual(UP, stream.LT(-1).getType())        stream.rewind(m)      # REWIND        # consume til end again :)        for _ in range(13): # consume til end            stream.LT(1)            stream.consume()        self.failUnlessEqual(EOF, stream.LT(1).getType())        self.failUnlessEqual(UP, stream.LT(-1).getType())    def testMarkRewindInMiddle(self):        # ^(101 ^(102 103 ^(106 107) ) 104 105)        # stream has 7 real + 6 nav nodes        # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF        r0 = CommonTree(CommonToken(101))        r1 = CommonTree(CommonToken(102))        r0.addChild(r1)        r1.addChild(CommonTree(CommonToken(103)))        r2 = CommonTree(CommonToken(106))        r2.addChild(CommonTree(CommonToken(107)))        r1.addChild(r2)        r0.addChild(CommonTree(CommonToken(104)))        r0.addChild(CommonTree(CommonToken(105)))        stream = CommonTreeNodeStream(r0)        for _ in range(7): # consume til middle            #System.out.println(tream.LT(1).getType())            stream.consume()        self.failUnlessEqual(107, stream.LT(1).getType())        m = stream.mark() # MARK        stream.consume() # consume 107        stream.consume() # consume UP        stream.consume() # consume UP        stream.consume() # consume 104        stream.rewind(m)      # REWIND        self.failUnlessEqual(107, stream.LT(1).getType())        stream.consume()        self.failUnlessEqual(UP, stream.LT(1).getType())        stream.consume()        self.failUnlessEqual(UP, stream.LT(1).getType())        stream.consume()        self.failUnlessEqual(104, stream.LT(1).getType())        stream.consume()        # now we're past rewind position        self.failUnlessEqual(105, stream.LT(1).getType())        stream.consume()        self.failUnlessEqual(UP, stream.LT(1).getType())        stream.consume()        self.failUnlessEqual(EOF, stream.LT(1).getType())        self.failUnlessEqual(UP, stream.LT(-1).getType())    def testMarkRewindNested(self):        # ^(101 ^(102 103 ^(106 107) ) 104 105)        # stream has 7 real + 6 nav nodes        # Sequence of types: 101 DN 102 DN 103 106 DN 107 UP UP 104 105 UP EOF        r0 = CommonTree(CommonToken(101))        r1 = CommonTree(CommonToken(102))        r0.addChild(r1)        r1.addChild(CommonTree(CommonToken(103)))        r2 = CommonTree(CommonToken(106))        r2.addChild(CommonTree(CommonToken(107)))        r1.addChild(r2)        r0.addChild(CommonTree(CommonToken(104)))        r0.addChild(CommonTree(CommonToken(105)))        stream = CommonTreeNodeStream(r0)        m = stream.mark() # MARK at start        stream.consume() # consume 101        stream.consume() # consume DN        m2 = stream.mark() # MARK on 102        stream.consume() # consume 102        stream.consume() # consume DN        stream.consume() # consume 103

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -