def read_grammar(self, filename): """ 语法读入 """ grammar = self.grammar grammar.clear() self.terminators, self.non_terminators = [], [] g_in, g_out = defaultdict(int), defaultdict(int) for l_hand, r_hand in bnf_reader(filename): symbol = l_hand[1:-1] __exp__ = [r[1:-1] for r in r_hand.split()] for exp in __exp__: g_in[exp] += 1 g_out[symbol] += 1 grammar[symbol].append(__exp__) for k, v in g_in.iteritems(): if not g_out[k]: self.terminators.append(k) self.non_terminators.extend([k for k, v in g_out.iteritems() if v])
def read_lex(self, filename): self.lexs = bnf_reader(filename)
def read_lex(self, filename): self.lexs = bnf_reader(filename)