def expand_rule(self, rule):
        "Returns all init_ptrs accessible by rule (recursive)"
        init_ptrs = set()
        def _expand_rule(rule):
            assert not rule.is_term, rule

            for r in self.rules_by_origin[rule]:
                init_ptr = RulePtr(r, 0)
                init_ptrs.add(init_ptr)

                if r.expansion: # if not empty rule
                    new_r = init_ptr.next
                    if not new_r.is_term:
                        yield new_r

        for _ in bfs([rule], _expand_rule):
            pass

        return fzset(init_ptrs)
def expand_rule ( self , rule ) : init_ptrs = set ( ) def _expand_rule ( rule ) : assert not rule . is_term , rule for r in self . rules_by_origin [ rule ] : init_ptr = RulePtr ( r , 0 ) init_ptrs . add ( init_ptr ) if r . expansion : new_r = init_ptr . next if not new_r . is_term : yield new_r for _ in bfs ( [ rule ] , _expand_rule ) : pass return fzset ( init_ptrs )
Returns all init_ptrs accessible by rule (recursive)