Ejemplo n.º 1
0
    def prune_cfg(self, cfg, lex):
        """ Given a grammar (gp), prune the unreachable rules.
            The cfg is directly manipulated.
        """
        unreachable = MiniUtils.unreachable_rules(cfg)
        if len(unreachable) > 0:
            print "=> unreachable: ", unreachable
            _rules = []
            for rule in cfg.rules:
                if rule.name not in unreachable:
                    _rules.append(rule)

            return CFG.CFG(lex, cfg.sym_tokens, _rules)

        return cfg