1*16467b97STreehugger Robotimport antlr3 2*16467b97STreehugger Robotimport testbase 3*16467b97STreehugger Robotimport unittest 4*16467b97STreehugger Robotimport textwrap 5*16467b97STreehugger Robot 6*16467b97STreehugger Robot 7*16467b97STreehugger Robotclass t022scopes(testbase.ANTLRTest): 8*16467b97STreehugger Robot def setUp(self): 9*16467b97STreehugger Robot self.compileGrammar() 10*16467b97STreehugger Robot 11*16467b97STreehugger Robot 12*16467b97STreehugger Robot def parserClass(self, base): 13*16467b97STreehugger Robot class TParser(base): 14*16467b97STreehugger Robot def emitErrorMessage(self, msg): 15*16467b97STreehugger Robot # report errors to /dev/null 16*16467b97STreehugger Robot pass 17*16467b97STreehugger Robot 18*16467b97STreehugger Robot def reportError(self, re): 19*16467b97STreehugger Robot # no error recovery yet, just crash! 20*16467b97STreehugger Robot raise re 21*16467b97STreehugger Robot 22*16467b97STreehugger Robot return TParser 23*16467b97STreehugger Robot 24*16467b97STreehugger Robot 25*16467b97STreehugger Robot def testa1(self): 26*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 27*16467b97STreehugger Robot lexer = self.getLexer(cStream) 28*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 29*16467b97STreehugger Robot parser = self.getParser(tStream) 30*16467b97STreehugger Robot parser.a() 31*16467b97STreehugger Robot 32*16467b97STreehugger Robot 33*16467b97STreehugger Robot def testb1(self): 34*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 35*16467b97STreehugger Robot lexer = self.getLexer(cStream) 36*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 37*16467b97STreehugger Robot parser = self.getParser(tStream) 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot try: 40*16467b97STreehugger Robot parser.b(False) 41*16467b97STreehugger Robot self.fail() 42*16467b97STreehugger Robot except antlr3.RecognitionException: 43*16467b97STreehugger Robot pass 44*16467b97STreehugger Robot 45*16467b97STreehugger Robot 46*16467b97STreehugger Robot def testb2(self): 47*16467b97STreehugger Robot cStream = antlr3.StringStream('foobar') 48*16467b97STreehugger Robot lexer = self.getLexer(cStream) 49*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 50*16467b97STreehugger Robot parser = self.getParser(tStream) 51*16467b97STreehugger Robot parser.b(True) 52*16467b97STreehugger Robot 53*16467b97STreehugger Robot 54*16467b97STreehugger Robot def testc1(self): 55*16467b97STreehugger Robot cStream = antlr3.StringStream( 56*16467b97STreehugger Robot textwrap.dedent('''\ 57*16467b97STreehugger Robot { 58*16467b97STreehugger Robot int i; 59*16467b97STreehugger Robot int j; 60*16467b97STreehugger Robot i = 0; 61*16467b97STreehugger Robot } 62*16467b97STreehugger Robot ''')) 63*16467b97STreehugger Robot 64*16467b97STreehugger Robot lexer = self.getLexer(cStream) 65*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 66*16467b97STreehugger Robot parser = self.getParser(tStream) 67*16467b97STreehugger Robot symbols = parser.c() 68*16467b97STreehugger Robot 69*16467b97STreehugger Robot self.failUnlessEqual( 70*16467b97STreehugger Robot symbols, 71*16467b97STreehugger Robot set(['i', 'j']) 72*16467b97STreehugger Robot ) 73*16467b97STreehugger Robot 74*16467b97STreehugger Robot 75*16467b97STreehugger Robot def testc2(self): 76*16467b97STreehugger Robot cStream = antlr3.StringStream( 77*16467b97STreehugger Robot textwrap.dedent('''\ 78*16467b97STreehugger Robot { 79*16467b97STreehugger Robot int i; 80*16467b97STreehugger Robot int j; 81*16467b97STreehugger Robot i = 0; 82*16467b97STreehugger Robot x = 4; 83*16467b97STreehugger Robot } 84*16467b97STreehugger Robot ''')) 85*16467b97STreehugger Robot 86*16467b97STreehugger Robot lexer = self.getLexer(cStream) 87*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 88*16467b97STreehugger Robot parser = self.getParser(tStream) 89*16467b97STreehugger Robot 90*16467b97STreehugger Robot try: 91*16467b97STreehugger Robot parser.c() 92*16467b97STreehugger Robot self.fail() 93*16467b97STreehugger Robot except RuntimeError, exc: 94*16467b97STreehugger Robot self.failUnlessEqual(exc.args[0], 'x') 95*16467b97STreehugger Robot 96*16467b97STreehugger Robot 97*16467b97STreehugger Robot def testd1(self): 98*16467b97STreehugger Robot cStream = antlr3.StringStream( 99*16467b97STreehugger Robot textwrap.dedent('''\ 100*16467b97STreehugger Robot { 101*16467b97STreehugger Robot int i; 102*16467b97STreehugger Robot int j; 103*16467b97STreehugger Robot i = 0; 104*16467b97STreehugger Robot { 105*16467b97STreehugger Robot int i; 106*16467b97STreehugger Robot int x; 107*16467b97STreehugger Robot x = 5; 108*16467b97STreehugger Robot } 109*16467b97STreehugger Robot } 110*16467b97STreehugger Robot ''')) 111*16467b97STreehugger Robot 112*16467b97STreehugger Robot lexer = self.getLexer(cStream) 113*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 114*16467b97STreehugger Robot parser = self.getParser(tStream) 115*16467b97STreehugger Robot symbols = parser.d() 116*16467b97STreehugger Robot 117*16467b97STreehugger Robot self.failUnlessEqual( 118*16467b97STreehugger Robot symbols, 119*16467b97STreehugger Robot set(['i', 'j']) 120*16467b97STreehugger Robot ) 121*16467b97STreehugger Robot 122*16467b97STreehugger Robot 123*16467b97STreehugger Robot def teste1(self): 124*16467b97STreehugger Robot cStream = antlr3.StringStream( 125*16467b97STreehugger Robot textwrap.dedent('''\ 126*16467b97STreehugger Robot { { { { 12 } } } } 127*16467b97STreehugger Robot ''')) 128*16467b97STreehugger Robot 129*16467b97STreehugger Robot lexer = self.getLexer(cStream) 130*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 131*16467b97STreehugger Robot parser = self.getParser(tStream) 132*16467b97STreehugger Robot res = parser.e() 133*16467b97STreehugger Robot 134*16467b97STreehugger Robot self.failUnlessEqual(res, 12) 135*16467b97STreehugger Robot 136*16467b97STreehugger Robot 137*16467b97STreehugger Robot def testf1(self): 138*16467b97STreehugger Robot cStream = antlr3.StringStream( 139*16467b97STreehugger Robot textwrap.dedent('''\ 140*16467b97STreehugger Robot { { { { 12 } } } } 141*16467b97STreehugger Robot ''')) 142*16467b97STreehugger Robot 143*16467b97STreehugger Robot lexer = self.getLexer(cStream) 144*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 145*16467b97STreehugger Robot parser = self.getParser(tStream) 146*16467b97STreehugger Robot res = parser.f() 147*16467b97STreehugger Robot 148*16467b97STreehugger Robot self.failUnlessEqual(res, None) 149*16467b97STreehugger Robot 150*16467b97STreehugger Robot 151*16467b97STreehugger Robot def testf2(self): 152*16467b97STreehugger Robot cStream = antlr3.StringStream( 153*16467b97STreehugger Robot textwrap.dedent('''\ 154*16467b97STreehugger Robot { { 12 } } 155*16467b97STreehugger Robot ''')) 156*16467b97STreehugger Robot 157*16467b97STreehugger Robot lexer = self.getLexer(cStream) 158*16467b97STreehugger Robot tStream = antlr3.CommonTokenStream(lexer) 159*16467b97STreehugger Robot parser = self.getParser(tStream) 160*16467b97STreehugger Robot res = parser.f() 161*16467b97STreehugger Robot 162*16467b97STreehugger Robot self.failUnlessEqual(res, None) 163*16467b97STreehugger Robot 164*16467b97STreehugger Robot 165*16467b97STreehugger Robot 166*16467b97STreehugger Robotif __name__ == '__main__': 167*16467b97STreehugger Robot unittest.main() 168