def repl(hook): lineno = 0 tokens = [] while True: try: log = agentspeak.Log(agentspeak.get_logger(__name__), 3) if not tokens: line = agentspeak.util.prompt("agentspeak.parser >>> ") else: line = agentspeak.util.prompt("agentspeak.parser ... ") lineno += 1 tokens.extend(agentspeak.lexer.tokenize(agentspeak.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 agentspeak.AggregatedError as error: print(str(error), file=sys.stderr) tokens = [] except KeyboardInterrupt: print() sys.exit(0)
def test_unexpected_eof(self): src = agentspeak.StringSource("<test>", "a") log = agentspeak.Log(agentspeak.get_logger(__name__), 3) tokens = agentspeak.lexer.TokenStream(src, log) with self.assertRaises(agentspeak.AggregatedError): agentspeak.parser.parse("<test>", tokens, log, frozenset())
def main(source, lineno=1): log = agentspeak.Log(agentspeak.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 = agentspeak.StringSource("<test>", "+!p <- (X = 2) + 1 > 0.") log = agentspeak.Log(agentspeak.get_logger(__name__), 3) tokens = agentspeak.lexer.TokenStream(src, log) with self.assertRaises(agentspeak.AggregatedError): agentspeak.parser.parse("<test>", tokens, log, frozenset()) log.throw()
def test_rule_head_not_unifiable(self): src = agentspeak.StringSource("<test>", "rule(X + 1) :- true.") log = agentspeak.Log(agentspeak.get_logger(__name__), 3) tokens = agentspeak.lexer.TokenStream(src, log) agentspeak.parser.parse("<test>", tokens, log, frozenset()) with self.assertRaises(agentspeak.AggregatedError): log.throw()
def test_formula_type(self): src = agentspeak.StringSource("<test>", "+!plan <- ?true.") log = agentspeak.Log(agentspeak.get_logger(__name__), 3) tokens = agentspeak.lexer.TokenStream(src, log) agentspeak.parser.parse("<test>", tokens, log, frozenset()) with self.assertRaises(agentspeak.AggregatedError): log.throw()
def main(source, hook): log = agentspeak.Log(agentspeak.get_logger(__name__), 3) tokens = agentspeak.lexer.TokenStream(source, log, 1) agent = parse(source.name, tokens, log) log.throw() hook(agent)
import collections import copy import functools import os.path import time import agentspeak import agentspeak.parser import agentspeak.lexer import agentspeak.util from agentspeak import UnaryOp, BinaryOp, AslError, asl_str from stag_logger.Logger import Logger LOGGER = agentspeak.get_logger(__name__) class BuildTermVisitor: def __init__(self, variables): self.variables = variables def visit_literal(self, ast_literal): return agentspeak.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