def repl(hook): lineno = 0 tokens = [] while True: try: log = pyson.Log(pyson.get_logger(__name__), 3) if not tokens: line = pyson.util.prompt("pyson.parser >>> ") else: line = pyson.util.prompt("pyson.parser ... ") lineno += 1 tokens.extend(pyson.lexer.tokenize(pyson.StringSource("<stdin>", line), log, lineno)) while tokens: token_stream = iter(tokens) try: agent = parse_agent("<stdin>", token_stream, log, frozenset()) except StopIteration: log.throw() break else: log.throw() hook(agent) tokens = list(token_stream) except pyson.AggregatedError as error: print(str(error), file=sys.stderr) tokens = [] except KeyboardInterrupt: print() sys.exit(0)
def test_unexpected_eof(self): src = pyson.StringSource("<test>", "a") log = pyson.Log(pyson.get_logger(__name__), 3) tokens = pyson.lexer.TokenStream(src, log) with self.assertRaises(pyson.AggregatedError): pyson.parser.parse(tokens, log, frozenset())
def main(source, lineno=1): log = pyson.Log(pyson.get_logger(__name__), 3) for tok in tokenize(source, log, lineno): log.info("%s", tok.lexeme, loc=tok.loc) log.throw()
def test_unify_return_value(self): src = pyson.StringSource("<test>", "+!p <- (X = 2) + 1 > 0.") log = pyson.Log(pyson.get_logger(__name__), 3) tokens = pyson.lexer.TokenStream(src, log) with self.assertRaises(pyson.AggregatedError): pyson.parser.parse(tokens, log, frozenset()) log.throw()
def test_rule_head_not_unifiable(self): src = pyson.StringSource("<test>", "rule(X + 1) :- true.") log = pyson.Log(pyson.get_logger(__name__), 3) tokens = pyson.lexer.TokenStream(src, log) pyson.parser.parse(tokens, log, frozenset()) with self.assertRaises(pyson.AggregatedError): log.throw()
def test_formula_type(self): src = pyson.StringSource("<test>", "+!plan <- ?true.") log = pyson.Log(pyson.get_logger(__name__), 3) tokens = pyson.lexer.TokenStream(src, log) pyson.parser.parse(tokens, log, frozenset()) with self.assertRaises(pyson.AggregatedError): log.throw()
def main(source, hook): log = pyson.Log(pyson.get_logger(__name__), 3) tokens = pyson.lexer.TokenStream(source, log, 1) agent = parse(source.name, tokens, log) log.throw() hook(agent)
import sys import collections import copy import functools import os.path import time import pyson import pyson.parser import pyson.lexer import pyson.util from pyson import UnaryOp, BinaryOp, PysonError, pyson_str LOGGER = pyson.get_logger(__name__) class BuildTermVisitor: def __init__(self, variables): self.variables = variables def visit_literal(self, ast_literal): return pyson.Literal(ast_literal.functor, (t.accept(self) for t in ast_literal.terms), (t.accept(self) for t in ast_literal.annotations)) def visit_const(self, ast_const): return ast_const.value def visit_list(self, ast_list):