1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport antlr3 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport testbase 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport textwrap 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass t022scopes(testbase.ANTLRTest): 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def setUp(self): 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.compileGrammar() 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def parserClass(self, base): 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver class TParser(base): 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def emitErrorMessage(self, msg): 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # report errors to /dev/null 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pass 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def reportError(self, re): 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver # no error recovery yet, just crash! 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver raise re 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return TParser 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testa1(self): 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream('foobar') 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.a() 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testb1(self): 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream('foobar') 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.b(False) 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except antlr3.RecognitionException: 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver pass 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testb2(self): 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream('foobar') 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.b(True) 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testc1(self): 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int i; 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int j; 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver i = 0; 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver symbols = parser.c() 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver symbols, 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set(['i', 'j']) 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testc2(self): 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int i; 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int j; 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver i = 0; 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver x = 4; 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver try: 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser.c() 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.fail() 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver except RuntimeError, exc: 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(exc.args[0], 'x') 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testd1(self): 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int i; 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int j; 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver i = 0; 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int i; 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int x; 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver x = 5; 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver symbols = parser.d() 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual( 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver symbols, 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver set(['i', 'j']) 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ) 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def teste1(self): 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { { { { 12 } } } } 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver res = parser.e() 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(res, 12) 135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testf1(self): 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { { { { 12 } } } } 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver res = parser.f() 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(res, None) 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver def testf2(self): 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver cStream = antlr3.StringStream( 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver textwrap.dedent('''\ 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { { 12 } } 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ''')) 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver lexer = self.getLexer(cStream) 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver tStream = antlr3.CommonTokenStream(lexer) 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver parser = self.getParser(tStream) 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver res = parser.f() 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver self.failUnlessEqual(res, None) 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif __name__ == '__main__': 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver unittest.main() 168