You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
4 months ago
|
import antlr3
|
||
|
import testbase
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
class t026actions(testbase.ANTLRTest):
|
||
|
def parserClass(self, base):
|
||
|
class TParser(base):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super().__init__(*args, **kwargs)
|
||
|
|
||
|
self._errors = []
|
||
|
self._output = ""
|
||
|
|
||
|
|
||
|
def capture(self, t):
|
||
|
self._output += t
|
||
|
|
||
|
|
||
|
def emitErrorMessage(self, msg):
|
||
|
self._errors.append(msg)
|
||
|
|
||
|
|
||
|
return TParser
|
||
|
|
||
|
|
||
|
def lexerClass(self, base):
|
||
|
class TLexer(base):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super().__init__(*args, **kwargs)
|
||
|
|
||
|
self._errors = []
|
||
|
self._output = ""
|
||
|
|
||
|
|
||
|
def capture(self, t):
|
||
|
self._output += t
|
||
|
|
||
|
|
||
|
def emitErrorMessage(self, msg):
|
||
|
self._errors.append(msg)
|
||
|
|
||
|
|
||
|
return TLexer
|
||
|
|
||
|
|
||
|
def setUp(self):
|
||
|
self.compileGrammar()
|
||
|
|
||
|
|
||
|
def testValid1(self):
|
||
|
cStream = antlr3.StringStream('foobar _Ab98 \n A12sdf')
|
||
|
lexer = self.getLexer(cStream)
|
||
|
tStream = antlr3.CommonTokenStream(lexer)
|
||
|
parser = self.getParser(tStream)
|
||
|
parser.prog()
|
||
|
|
||
|
self.assertEqual(
|
||
|
parser._output,
|
||
|
'init;after;finally;')
|
||
|
self.assertEqual(
|
||
|
lexer._output,
|
||
|
"action;'foobar' 4 1 0 -1 0 0 5;attribute;action;"
|
||
|
"'_Ab98' 4 1 7 -1 0 7 11;attribute;action;"
|
||
|
"'A12sdf' 4 2 1 -1 0 15 20;attribute;")
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|