def __init__(self, collapseTerms=True, collapseAtoms=False, callback=None): """ collapseTerms: function terms in predicate arguments are collapsed into strings collapseAtoms: atoms (predicate plus terms) are collapsed into strings requires that collapseTerms is True example: a(b,c(d)) collapseTerms=True, collapseAtoms=False: result = Term('a', ['b', 'c(d)']) collapseTerms=True, collapseAtoms=True: result = 'a(b,c(d))' collapseTerms=False, collapseAtoms=False: result = Term('a', ['b', Term('c', ['d'])]) collapseTerms=False, collapseAtoms=True: invalid arguments """ self.accu = TermSet() self.lexer = Lexer() self.tokens = self.lexer.tokens self.collapseTerms = collapseTerms self.collapseAtoms = collapseAtoms self.callback = callback if collapseAtoms and not collapseTerms: raise ValueError("if atoms are collapsed, functions must" " also be collapsed!") self.parser = yacc.yacc(module=self, optimize=OPTIMIZE, tabmodule=asp_py_parsetab)
def parse(self, line): self.accu = TermSet() line = line.strip() if len(line) > 0: self.parser.parse(line, lexer=self.lexer.lexer) if self.callback: self.callback(self.accu) return self.accu