Exemple #1
0
    def compile(self, grammar):
        """
        Produce an object capable of parsing via this grammar.

        @param grammar: A string containing an OMeta grammar.
        """
        from pymeta.grammar_definition import OMetaGrammar, NullOptimizer
        g = OMetaGrammar(dedent(grammar))
        tree = g.parseGrammar('TestGrammar', TreeBuilder)
        opt = NullOptimizer([tree])
        opt.builder = TreeBuilder("TestGrammar", opt)
        tree, err = opt.apply("grammar")
        grammarClass = moduleFromGrammar(tree, 'TestGrammar', OMetaBase, {})
        return HandyWrapper(grammarClass)
Exemple #2
0
# Generates static grammar modules so the PyvaScript grammar doesn't need to be
# parsed on first import.
if __name__ == '__main__':
    import os, sys
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
    from pymeta.builder import TreeBuilder, writeBoot
    from pymeta.grammar_definition import OMetaGrammar
    from pyvascript.grammar import grammar_path, translator_path
    for name, path in (('Grammar', grammar_path), ('Translator', translator_path)):
        with open(path, 'r') as fp:
            source = fp.read()
        grammar = OMetaGrammar(source)
        tree = grammar.parseGrammar('Generated' + name, TreeBuilder)
        path = os.path.join(os.path.dirname(__file__), name.lower() + '_generated.py')
        with open(path, 'w') as fp:
            fp.write('import json\ndef p(s): print(s)\n')
            fp.write(writeBoot(tree))
Exemple #3
0
# Generates static grammar modules so the PyvaScript grammar doesn't need to be
# parsed on first import.
if __name__ == '__main__':
    import os, sys
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
    from pymeta.builder import TreeBuilder, writeBoot
    from pymeta.grammar_definition import OMetaGrammar
    from pyvascript.grammar import grammar_path, translator_path
    for name, path in (('Grammar', grammar_path), ('Translator',
                                                   translator_path)):
        with open(path, 'r') as fp:
            source = fp.read()
        grammar = OMetaGrammar(source)
        tree = grammar.parseGrammar('Generated' + name, TreeBuilder)
        path = os.path.join(os.path.dirname(__file__),
                            name.lower() + '_generated.py')
        with open(path, 'w') as fp:
            fp.write('import json\ndef p(s): print(s)\n')
            fp.write(writeBoot(tree))
Exemple #4
0
# Generates a boot grammar and stores it in boot_generated.py. If everything looks OK you can
# replace your boot.py with the generated module.
if __name__ == '__main__':
    import os, sys
    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
    from pymeta.builder import TreeBuilder, writeBoot
    from pymeta.grammar_definition import OMetaGrammar, ometaGrammar
    ometa_grammar = OMetaGrammar(ometaGrammar)
    tree = ometa_grammar.parseGrammar('BootOMetaGrammar', TreeBuilder)
    path = os.path.join(os.path.dirname(__file__), 'boot_generated.py')
    with open(path, 'w') as fp:
        fp.write(writeBoot(tree))