def __init__ (self): global my_grammar self.handlers = trampoline.pgen_grammar_to_handlers(my_grammar, {}) self.handlers['start'] = self.parse_start self.handlers['qsuite'] = self.parse_qsuite qsuite_index = [dfa[0] for dfa in my_grammar[0] if dfa[1] == 'qsuite'][0] self.handlers[qsuite_index] = self.parse_qsuite
def __init__(self, start_symbol=None): self.handlers = trampoline.pgen_grammar_to_handlers( self.my_grammar, {}) nonterminal_override_names = 'mysuite', 'myexpr0', 'myexpr1' nonterminal_overrides = ((dfa[1], dfa[0]) for dfa in self.my_grammar[0] if dfa[1] in nonterminal_override_names) for nonterminal_name, nonterminal_index in nonterminal_overrides: handler = getattr(self, 'parse_%s' % nonterminal_name) self.handlers[nonterminal_name] = handler self.handlers[nonterminal_index] = handler self.start_symbol = (start_symbol if start_symbol is not None else 'file_input') self.handlers['start'] = self.parse_start
def setUp (self): # Parse the MyFront grammar, create a set of automata for it (like # pgen does), and then convert the automata to generators for the # treepoline. grammar_st = PgenParser.parseFile(basil.lang.python.__path__[0] + "/python26/Grammar") grammar_obj = PyPgen.buildParser(grammar_st) grammar_obj.setStart(grammar_obj.stringToSymbolMap()['file_input']) self.parser1 = grammar_obj gram_tup0 = grammar_obj.toTuple() gram_tup1 = DFAParser.addAccelerators(gram_tup0) handlers = trampoline.pgen_grammar_to_handlers(gram_tup1, {}) # Override the start special nonterminal to just do what it is # supposed to: def parse_start (instream, outtree): yield 'file_input' handlers['start'] = parse_start self.handlers = handlers