def setUp(self): self._parser = MetaParser()
def setUp(self): self._parser = MetaParser() self._generated_file = ""
class ParserTest(unittest.TestCase): def setUp(self): self._parser = MetaParser() def tearDown(self): self._parser = None def testAll(self): code = \ """ # Tokens: keyword FOREACH 'foreach'; keyword TRUE 'true' { case-sensitive: FALSE } word ID '[a-zA-Z_][a-zA-Z0-9_]*'; prefix INCREMENT '++'; postfix DECREMENT '--' { escape: TRUE } separator DOT '.' { whitespace-allowed: FALSE, is-pattern: FALSE } # <-- some properties literal LIT; # <-- has no properties separator MODULE_SEP '::' { whitespace-allowed: FALSE } word BOOL_FUNCNAME '[a-zA-Z_][a-zA-Z0-9_]*' { filter-callback: filter_keywords } type_name = ( module=ID MODULE_SEP )* base=ID ; for_loop = ( 'foreach' elem=ID 'in' list=type_name 'do' | 'forall' list=type_name 'do' ) '{' (statements)* '}' ; """ self._parser.parse_string(code) self.assertIsNotNone(self._parser._ast) if self._parser._ast: print(self._parser._ast.toXml()) def testGrammarFile(self): self._parser.parse_file("test.bovg") ast = self._parser._ast self.assertIsNotNone(ast) if ast: print(ast.toXml()) def testCompile(self): symbols = self._parser.compile_file("test.bovg") self.assertIsNotNone(symbols) for token_type in symbols.get_token_types(): print("%s: '%s'" % (token_type.token_id, token_type.text)) for rule in symbols.get_rules(): dep_info = [(r.rule_id, symbols.get_rule_deps_level(r)) for r in rule.get_rule_deps()] level = symbols.get_rule_deps_level(rule) print("%d: %s --> %s" % (level, rule.rule_id, dep_info))
class CodeGenTest(unittest.TestCase): def setUp(self): self._parser = MetaParser() self._generated_file = "" def tearDown(self): self._parser = None if self._generated_file: try: os.remove(self._generated_file) except: pass def testPythonCode(self): symbols = self._parser.compile_file(TEST_GRAMMAR_FILE) self.assertIsNotNone(symbols) codegen = PythonCodeGenerator() output = StdOut() CodeWriter(symbols, codegen).write(output) def testPythonRuntime(self): symbols = self._parser.compile_file(TEST_GRAMMAR_FILE) self.assertIsNotNone(symbols) self._generated_file = "godl_parser.py" codegen = PythonCodeGenerator() output = FileOut(self._generated_file) output.open_file() CodeWriter(symbols, codegen).write(output) output.close_file() from godl_parser import GodlParser parser = GodlParser() self.assertIsNotNone(parser) code = """ /* GODL example code */ include "some_external_defs.goc"; package demo { gobject Person { // <-- a class Person { } method do_something { result { type: string; } parameter error { type: ref(ref(GError)); } } } } """ try: ast = parser.parseString(code) except Exception as error: self.fail(str(error)) self.assertIsNotNone(ast) print(ast.toXml()) def testPythonRT_2(self): symbols = self._parser.compile_file("text_block_test.bovg") self.assertIsNotNone(symbols) self._generated_file = "demo_parser.py" codegen = PythonCodeGenerator() output = FileOut(self._generated_file) output.open_file() CodeWriter(symbols, codegen).write(output) output.close_file() from demo_parser import TextblockParser parser = TextblockParser() self.assertIsNotNone(parser) code = ''' # Test var hello; var world = 'World'; var text = """ This is a long text block. It stretches over several lines..."""; ''' try: ast = parser.parseString(code) except Exception as error: self.fail(str(error)) self.assertIsNotNone(ast) print(ast.toXml()) def testJavaScriptCode(self): symbols = self._parser.compile_file(TEST_GRAMMAR_FILE) self.assertIsNotNone(symbols) codegen = JSCodeGenerator() output = StdOut() CodeWriter(symbols, codegen).write(output)