Beispiel #1
0
    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))
Beispiel #2
0
    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))