📄 t042ast.py
字号:
import unittestimport textwrapimport antlr3import testbaseclass t042ast(testbase.ANTLRTest): def lexerClass(self, base): class TLexer(base): def recover(self, input, re): # no error recovery yet, just crash! raise return TLexer def parserClass(self, base): class TParser(base): def recover(self, input, re): # no error recovery yet, just crash! raise return TParser def parse(self, text, method, rArgs=[], **kwargs): self.compileGrammar() #options='-trace') cStream = antlr3.StringStream(text) self.lexer = self.getLexer(cStream) tStream = antlr3.CommonTokenStream(self.lexer) self.parser = self.getParser(tStream) for attr, val in kwargs.items(): setattr(self.parser, attr, val) return getattr(self.parser, method)(*rArgs) def testR1(self): r = self.parse("1 + 2", 'r1') self.failUnlessEqual( r.tree.toStringTree(), '(+ 1 2)' ) def testR2a(self): r = self.parse("assert 2+3;", 'r2') self.failUnlessEqual( r.tree.toStringTree(), '(assert (+ 2 3))' ) def testR2b(self): r = self.parse("assert 2+3 : 5;", 'r2') self.failUnlessEqual( r.tree.toStringTree(), '(assert (+ 2 3) 5)' ) def testR3a(self): r = self.parse("if 1 fooze", 'r3') self.failUnlessEqual( r.tree.toStringTree(), '(if 1 fooze)' ) def testR3b(self): r = self.parse("if 1 fooze else fooze", 'r3') self.failUnlessEqual( r.tree.toStringTree(), '(if 1 fooze fooze)' ) def testR4a(self): r = self.parse("while 2 fooze", 'r4') self.failUnlessEqual( r.tree.toStringTree(), '(while 2 fooze)' ) def testR5a(self): r = self.parse("return;", 'r5') self.failUnlessEqual( r.tree.toStringTree(), 'return' ) def testR5b(self): r = self.parse("return 2+3;", 'r5') self.failUnlessEqual( r.tree.toStringTree(), '(return (+ 2 3))' ) def testR6a(self): r = self.parse("3", 'r6') self.failUnlessEqual( r.tree.toStringTree(), '3' ) def testR6b(self): r = self.parse("3 a", 'r6') self.failUnlessEqual( r.tree.toStringTree(), '3 a' ) def testR7(self): r = self.parse("3", 'r7') self.failUnlessEqual( r.tree.toStringTree(), 'nil' ) def testR8(self): r = self.parse("var foo:bool", 'r8') self.failUnlessEqual( r.tree.toStringTree(), '(var bool foo)' ) def testR9(self): r = self.parse("int foo;", 'r9') self.failUnlessEqual( r.tree.toStringTree(), '(VARDEF int foo)' ) def testR10(self): r = self.parse("10", 'r10') self.failUnlessEqual( r.tree.toStringTree(), '10.0' ) def testR11a(self): r = self.parse("1+2", 'r11') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR (+ 1 2))' ) def testR11b(self): r = self.parse("", 'r11') self.failUnlessEqual( r.tree.toStringTree(), 'EXPR' ) def testR12a(self): r = self.parse("foo", 'r12') self.failUnlessEqual( r.tree.toStringTree(), 'foo' ) def testR12b(self): r = self.parse("foo, bar, gnurz", 'r12') self.failUnlessEqual( r.tree.toStringTree(), 'foo bar gnurz' ) def testR13a(self): r = self.parse("int foo;", 'r13') self.failUnlessEqual( r.tree.toStringTree(), '(int foo)' ) def testR13b(self): r = self.parse("bool foo, bar, gnurz;", 'r13') self.failUnlessEqual( r.tree.toStringTree(), '(bool foo bar gnurz)' ) def testR14a(self): r = self.parse("1+2 int", 'r14') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR (+ 1 2) int)' ) def testR14b(self): r = self.parse("1+2 int bool", 'r14') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR (+ 1 2) int bool)' ) def testR14c(self): r = self.parse("int bool", 'r14') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR int bool)' ) def testR14d(self): r = self.parse("fooze fooze int bool", 'r14') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR fooze fooze int bool)' ) def testR14e(self): r = self.parse("7+9 fooze fooze int bool", 'r14') self.failUnlessEqual( r.tree.toStringTree(), '(EXPR (+ 7 9) fooze fooze int bool)' ) def testR15(self): r = self.parse("7", 'r15') self.failUnlessEqual( r.tree.toStringTree(), '7 7' ) def testR16a(self): r = self.parse("int foo", 'r16') self.failUnlessEqual( r.tree.toStringTree(), '(int foo)' ) def testR16b(self): r = self.parse("int foo, bar, gnurz", 'r16') self.failUnlessEqual( r.tree.toStringTree(), '(int foo) (int bar) (int gnurz)' ) def testR17a(self): r = self.parse("for ( fooze ; 1 + 2 ; fooze ) fooze", 'r17') self.failUnlessEqual( r.tree.toStringTree(), '(for fooze (+ 1 2) fooze fooze)' ) def testR18a(self): r = self.parse("for", 'r18') self.failUnlessEqual( r.tree.toStringTree(), 'BLOCK' ) def testR19a(self): r = self.parse("for", 'r19') self.failUnlessEqual( r.tree.toStringTree(), 'for' ) def testR20a(self): r = self.parse("for", 'r20') self.failUnlessEqual( r.tree.toStringTree(), 'FOR' ) def testR21a(self): r = self.parse("for", 'r21') self.failUnlessEqual( r.tree.toStringTree(), 'BLOCK' ) def testR22a(self): r = self.parse("for", 'r22') self.failUnlessEqual( r.tree.toStringTree(), 'for' ) def testR23a(self): r = self.parse("for", 'r23') self.failUnlessEqual( r.tree.toStringTree(), 'FOR' ) def testR24a(self): r = self.parse("fooze 1 + 2", 'r24') self.failUnlessEqual( r.tree.toStringTree(), '(fooze (+ 1 2))' ) def testR25a(self): r = self.parse("fooze, fooze2 1 + 2", 'r25') self.failUnlessEqual( r.tree.toStringTree(), '(fooze (+ 1 2))' ) def testR26a(self): r = self.parse("fooze, fooze2", 'r26') self.failUnlessEqual( r.tree.toStringTree(), '(BLOCK fooze fooze2)' )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -