def expand_pushbacks(node): if not node.elts: return None elif all(is_terminal(each) for each in node.elts): elts = [collect_pushback(_C_(unit(each))) for each in node.elts] return foldr(conjunction, elts) else: raise TypeError( 'Non-terminal in DCG pushback list found: {}'.format(node))
def expand_terminals(node, cont): if not node.elts: return cont(None) elif all(is_terminal(each) for each in node.elts): *elts, last = ( collect_terminal(_C_(unit(each))) for each in node.elts) return foldr(conjunction, elts, cont(last)) else: raise TypeError( 'Non-terminal in DCG terrminal list found: {}'.format(node))