Bonjour,
je n'ai pas encore tout lu, mais je vois déjà une chose qui peut être simplifiée.
Créer dynamiquement des méthodes dans la classe EBNF, c'est pas vraiment nécessaire. Je réécrirais plutôt la méthode parse comme ceci:
1 2 3 4 5 6 7 8 9
| def parse(self, key):
"""
Methodes generiques qui construits un dictionaire avec les tokens
obtenus et la cle passe en parametres
"""
def action(str, loc, toks):
log.debug("%s -> %s"%(key,toks))
return { key : list(toks) }
return action |
Et donc, par exemple,
meta_identfier = Word(alphas, alphanums + '_').setParseAction(self.parse_metaidentifier)
devient
meta_identfier = Word(alphas, alphanums + '_').setParseAction(self.parse('metaidentifier'))
Et du coup les méthodes add_builtin_parse_function et add_parse_idents deviennent inutiles.
[EDIT:] et on dirait que l'attribut repo_keys ne sert à rien; il est mis à jour mais jamais lu
Partager