def _get_yacc_variables(self, module): frame, variables = get_global_vars(module) filter_rules = [lambda x: x == "tokens", lambda x: x.startswith("p_")] variables = sorted(filter_variables(filter_rules, variables), key=partial(by_appearance, frame)) tokens, production_rules = categorize(filter_rules, variables) if len(tokens) == 0: raise SyntaxError("'tokens' (a tuple of strings) must be defined") return tokens[-1][-1], production_rules # tokens = [('tokens', (...))]
def get_lexer_variables(self, module=None): frame, variables = get_global_vars(module) filter_rules = [lambda x: x == "tokens", lambda x: x == "states", lambda x: x.startswith("t_")] variables = sorted(filter_variables(filter_rules, variables), key=partial(by_appearance, frame)) token_names, states, t_rules = categorize(filter_rules, variables) if len(token_names) == 0: raise SyntaxError("'tokens' (a tuple of strings) must be defined") token_names = token_names[0] if token_names else [] states = states[0] if states else [] return token_names, states, t_rules