Пример #1
0
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)
Пример #2
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())
Пример #3
0
    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()
Пример #4
0
    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()
Пример #5
0
    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()
Пример #6
0
def repl(agent, env, actions):
    lineno = 0
    tokens = []

    env = Environment()
    variables = {}
    intention = Intention()

    while True:
        try:
            log = agentspeak.Log(LOGGER, 3)

            try:
                if not tokens:
                    line = agentspeak.util.prompt("%s >>> " % agent.name)
                else:
                    line = agentspeak.util.prompt("%s ... " % agent.name)
            except KeyboardInterrupt:
                print()
                sys.exit(0)

            lineno += 1

            tokens.extend(
                agentspeak.lexer.tokenize(
                    agentspeak.StringSource("<stdin>", line), log, lineno))

            while tokens:
                token_stream = iter(tokens)
                try:
                    tok = next(token_stream)
                    tok, body = agentspeak.parser.parse_plan_body(
                        tok, token_stream, log)
                except StopIteration:
                    log.throw()
                    break
                else:
                    log.throw()
                    tokens = list(token_stream)

                    intention.instr = Instruction(noop)
                    body.accept(
                        BuildInstructionsVisitor(variables, actions,
                                                 intention.instr, log))
                    log.throw()
                    agent.intentions.append(collections.deque([intention]))
                    env.run_agent(agent)
                    dump_variables(variables, intention.scope)
        except agentspeak.AggregatedError as error:
            print(str(error), file=sys.stderr)
            tokens = []
        except agentspeak.AslError as error:
            LOGGER.error("%s", error)
            tokens = []
Пример #7
0
def repl():
    lineno = 1
    while True:
        try:
            line = agentspeak.util.prompt("agentspeak.lexer >>> ")
            main(agentspeak.StringSource("<stdin>", line), lineno)
            lineno += 1
        except agentspeak.AggregatedError as error:
            print(str(error), file=sys.stderr)
        except KeyboardInterrupt:
            print()
            sys.exit(0)
Пример #8
0
def _wait(agent, term, intention):
    # Handle optional arguments.
    args = [agentspeak.grounded(arg, intention.scope) for arg in term.args]
    if len(args) == 2:
        event, millis = args
    else:
        if agentspeak.is_number(args[0]):
            millis = args[0]
            event = None
        else:
            millis = None
            event = args[0]

    # Type checks.
    if not (millis is None or agentspeak.is_number(millis)):
        raise agentspeak.AslError("expected timeout for .wait to be numeric")
    if not (event is None or agentspeak.is_string(event)):
        raise agentspeak.AslError("expected event for .wait to be a string")

    # Event.
    if event is not None:
        # Parse event.
        if not event.endswith("."):
            event += "."
        log = agentspeak.Log(LOGGER, 1)
        tokens = agentspeak.lexer.TokenStream(
            agentspeak.StringSource("<.wait>", event), log)
        tok, ast_event = agentspeak.parser.parse_event(tokens.next(), tokens,
                                                       log)
        if tok.lexeme != ".":
            raise log.error(
                "expected no further tokens after event for .wait, got: '%s'",
                tok.lexeme,
                loc=tok.loc)

        # Build term.
        event = ast_event.accept(agentspeak.runtime.BuildEventVisitor(log))

    # Timeout.
    if millis is None:
        until = None
    else:
        until = agent.env.time() + millis / 1000

    # Create waiter.
    intention.waiter = agentspeak.runtime.Waiter(event=event, until=until)
    yield