Ejemplo n.º 1
0
    def setUp(self):

        self._parser = MetaParser()
Ejemplo n.º 2
0
    def setUp(self):

        self._parser = MetaParser()
        self._generated_file = "" 
Ejemplo n.º 3
0
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))
Ejemplo n.º 4
0
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)