示例#1
0
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)
示例#2
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())
示例#3
0
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()
示例#4
0
    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()
示例#5
0
    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()
示例#6
0
    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()
示例#7
0
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)
示例#8
0
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):