def pgen_to_grammar_obj (source): pgen = PyPgen.PyPgen() nfa_grammar = pgen.handleStart(PgenParser.parseString(source)) dfa_grammar = pgen.generateDfaGrammar(nfa_grammar) pgen.translateLabels(dfa_grammar) pgen.generateFirstSets(dfa_grammar) dfa_grammar = DFAParser.addAccelerators(dfa_grammar) return dfa_grammar
def pgen_to_grammar_obj (source): '''XXX Stolen from PyCon 2010 sprint sandbox. Move into Basil proper.''' pgen = PyPgen.PyPgen() nfa_grammar = pgen.handleStart(PgenParser.parseString(source)) dfa_grammar = pgen.generateDfaGrammar(nfa_grammar) pgen.translateLabels(dfa_grammar) pgen.generateFirstSets(dfa_grammar) dfa_grammar = DFAParser.addAccelerators(dfa_grammar) return dfa_grammar
def internalizePGEN (self, stream): """BasilGrammarModelFactory.internalizePgen """ from basil.parsing import PgenParser from basil.models.grammar.InternalizePgen import PgenInternalizer if type(stream) == types.StringType: text = stream else: text = stream.read() parse = PgenParser.parseString(text) internalizer = PgenInternalizer(self) return internalizer(parse)
def main (fileName = None): """main Read a pgen input grammar from the given file name. If no file name is given, read the grammar from stdin. Print a XML document for the resulting grammar model translation. """ if None == fileName: parseTree = PgenParser.parseString(sys.stdin.read()) else: parseTree = PgenParser.parseFile(fileName) grammarFactoryClass = BasilGrammarModel.getModelFactory() grammarFactory = grammarFactoryClass() internalizer = PgenInternalizer(grammarFactory) model = internalizer(parseTree) print grammarFactory.externalizeXML(model)
# ______________________________________________________________________ # Module data MY_GRAMMAR_EXT = """ compound_stmt: quotedef quotedef: 'quote' ['[' expr ']'] [NAME] qsuite qsuite: ':' (QUOTED NEWLINE | NEWLINE QUOTED) """ MY_START_SYMBOL = 'file_input' pgen = PyPgen.PyPgen() py_grammar_path = os.path.split(basil.lang.python.__file__)[0] py_nfa_grammar = pgen.handleStart(PgenParser.parseFile( os.path.join(py_grammar_path, 'python26/Grammar'))) ext_nfa_grammar = pgen.handleStart(PgenParser.parseString(MY_GRAMMAR_EXT)) my_nfa_grammar = nfa.compose_nfas(py_nfa_grammar, ext_nfa_grammar) my_grammar0 = pgen.generateDfaGrammar(my_nfa_grammar, MY_START_SYMBOL) pgen.translateLabels(my_grammar0, {'QUOTED' : mylexer.QUOTED}) pgen.generateFirstSets(my_grammar0) my_grammar0[0] = map(tuple, my_grammar0[0]) my_grammar0 = tuple(my_grammar0) my_grammar = DFAParser.addAccelerators(my_grammar0) del my_grammar0 __DEBUG__ = False if __DEBUG__: import pprint # ______________________________________________________________________