t044trace.py

来自「antlr最新版本V3源代码」· Python 代码 · 共 97 行

PY
97
字号
import antlr3import testbaseimport unittestclass T(testbase.ANTLRTest):    def setUp(self):        self.compileGrammar(options='-trace')            def lexerClass(self, base):        class TLexer(base):            def __init__(self, *args, **kwargs):                base.__init__(self, *args, **kwargs)                self.traces = []            def traceIn(self, ruleName, ruleIndex):                self.traces.append('>'+ruleName)            def traceOut(self, ruleName, ruleIndex):                self.traces.append('<'+ruleName)            def recover(self, input, re):                # no error recovery yet, just crash!                raise        return TLexer                def parserClass(self, base):        class TParser(base):            def __init__(self, *args, **kwargs):                base.__init__(self, *args, **kwargs)                self.traces = []            def traceIn(self, ruleName, ruleIndex):                self.traces.append('>'+ruleName)            def traceOut(self, ruleName, ruleIndex):                self.traces.append('<'+ruleName)            def recover(self, input, re):                # no error recovery yet, just crash!                raise            def getRuleInvocationStack(self):                return self._getRuleInvocationStack(base.__module__)                    return TParser                def testTrace(self):        cStream = antlr3.StringStream('< 1 + 2 + 3 >')        lexer = self.getLexer(cStream)        tStream = antlr3.CommonTokenStream(lexer)        parser = self.getParser(tStream)        parser.a()        self.failUnlessEqual(            lexer.traces,            [ '>T6', '<T6', '>WS', '<WS', '>INT', '<INT', '>WS', '<WS',              '>T8', '<T8', '>WS', '<WS', '>INT', '<INT', '>WS', '<WS',              '>T8', '<T8', '>WS', '<WS', '>INT', '<INT', '>WS', '<WS',              '>T7', '<T7']            )        self.failUnlessEqual(            parser.traces,            [ '>a', '>synpred1_fragment', '<synpred1_fragment', '>b', '>c',              '<c', '>c', '<c', '>c', '<c', '<b', '<a' ]            )                def testInvokationStack(self):        cStream = antlr3.StringStream('< 1 + 2 + 3 >')        lexer = self.getLexer(cStream)        tStream = antlr3.CommonTokenStream(lexer)        parser = self.getParser(tStream)        parser.a()        self.failUnlessEqual(            parser._stack,            ['a', 'b', 'c']            )        if __name__ == '__main__':    unittest.main()    

⌨️ 快捷键说明

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