better linking
This commit is contained in:
parent
e06606ed1e
commit
03d46253c5
@ -5,7 +5,7 @@ from bu4.evaluation.av.lambdaenv import LambdaEnv
|
|||||||
from bu4.evaluation.constructs.elinked import ELinked
|
from bu4.evaluation.constructs.elinked import ELinked
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
from bu4.evaluation.constructs.evalue import EValue
|
from bu4.evaluation.constructs.evalue import EValue
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('ELambda',)
|
__all__ = ('ELambda',)
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
from bu4.evaluation.av.envtype import envtype
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('ELinked',)
|
__all__ = ('ELinked',)
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ from bu4.evaluation.constructs.elinked import ELinked
|
|||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
from bu4.evaluation.constructs.evalue import EValue
|
from bu4.evaluation.constructs.evalue import EValue
|
||||||
from bu4.evaluation.targets.avtarget import AVTarget
|
from bu4.evaluation.targets.avtarget import AVTarget
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('AVCall',)
|
__all__ = ('AVCall',)
|
||||||
|
|
||||||
|
26
bu4/linking/constructs/lcall.py
Normal file
26
bu4/linking/constructs/lcall.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
from bu4.evaluation.av.aftervalue import AfterValue
|
||||||
|
from bu4.evaluation.av.envtype import envtype
|
||||||
|
from bu4.evaluation.constructs.elinked import ELinked
|
||||||
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
|
from bu4.evaluation.targets.avcall import AVCall
|
||||||
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
|
__all__ = ('LCall',)
|
||||||
|
|
||||||
|
|
||||||
|
class LCall(Linked):
|
||||||
|
argument: Linked
|
||||||
|
lambda_: Linked
|
||||||
|
|
||||||
|
def __init__(self, argument: Linked, lambda_: Linked):
|
||||||
|
self.argument = argument
|
||||||
|
self.lambda_ = lambda_
|
||||||
|
self.future = self.argument.future | self.lambda_.future
|
||||||
|
|
||||||
|
def evaluable(self, env: envtype) -> Evaluable:
|
||||||
|
return AfterValue(ELinked(env, self.lambda_), AVCall(env, self.argument))
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'/{self.argument}{self.lambda_}'
|
13
bu4/linking/constructs/linked.py
Normal file
13
bu4/linking/constructs/linked.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
from bu4.evaluation.av.envtype import envtype
|
||||||
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
|
|
||||||
|
__all__ = ('Linked',)
|
||||||
|
|
||||||
|
|
||||||
|
class Linked:
|
||||||
|
future: set[bytes]
|
||||||
|
|
||||||
|
def evaluable(self, env: envtype) -> Evaluable:
|
||||||
|
raise NotImplementedError
|
27
bu4/linking/constructs/llambda.py
Normal file
27
bu4/linking/constructs/llambda.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
from bu4.evaluation.av.envtype import envtype
|
||||||
|
from bu4.evaluation.constructs.elambda import ELambda
|
||||||
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
|
__all__ = ('LLambda',)
|
||||||
|
|
||||||
|
|
||||||
|
class LLambda(Linked):
|
||||||
|
value: Linked
|
||||||
|
|
||||||
|
def __init__(self, name: bytes, value: Linked):
|
||||||
|
self.name = name
|
||||||
|
self.value = value
|
||||||
|
self.future = self.value.future - {self.name}
|
||||||
|
|
||||||
|
def evaluable(self, env: envtype) -> Evaluable:
|
||||||
|
return ELambda(
|
||||||
|
{name: container for name, container in env.items() if name in self.future},
|
||||||
|
self.name,
|
||||||
|
self.value
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'({self.name.decode()}){self.value}'
|
19
bu4/linking/constructs/lname.py
Normal file
19
bu4/linking/constructs/lname.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
from bu4.evaluation.av.envtype import envtype
|
||||||
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
|
__all__ = ('LName',)
|
||||||
|
|
||||||
|
|
||||||
|
class LName(Linked):
|
||||||
|
def __init__(self, name: bytes):
|
||||||
|
self.name = name
|
||||||
|
self.future = {name}
|
||||||
|
|
||||||
|
def evaluable(self, env: envtype) -> Evaluable:
|
||||||
|
return env[self.name]
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f'[{self.name.decode()}]'
|
19
bu4/linking/constructs/lnull.py
Normal file
19
bu4/linking/constructs/lnull.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
from bu4.evaluation.av.envtype import envtype
|
||||||
|
from bu4.evaluation.constructs.enull import ENull
|
||||||
|
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||||
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
|
__all__ = ('LNull',)
|
||||||
|
|
||||||
|
|
||||||
|
class LNull(Linked):
|
||||||
|
def __init__(self):
|
||||||
|
self.future = set()
|
||||||
|
|
||||||
|
def evaluable(self, env: envtype) -> Evaluable:
|
||||||
|
return ENull()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '?'
|
@ -3,12 +3,12 @@
|
|||||||
from bu4.evaluation.av.envtype import envtype
|
from bu4.evaluation.av.envtype import envtype
|
||||||
from bu4.evaluation.constructs.elinked import ELinked
|
from bu4.evaluation.constructs.elinked import ELinked
|
||||||
from bu4.linking.prepare import prepare
|
from bu4.linking.prepare import prepare
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
|
||||||
|
|
||||||
__all__ = ('evaluable_from_parsed',)
|
__all__ = ('evaluable_from_parsed',)
|
||||||
|
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
def evaluable_from_parsed(env: envtype, parsed: Parsed):
|
def evaluable_from_parsed(env: envtype, parsed: Parsed):
|
||||||
linked = parsed.link(set(env))
|
linked = prepare(parsed.link(set(env)))
|
||||||
prepare(linked)
|
|
||||||
return ELinked(env, linked)
|
return ELinked(env, linked)
|
||||||
|
@ -5,7 +5,7 @@ from bu4.linking.states.linkingfinished import LinkingFinished
|
|||||||
from bu4.linking.states.linkingparsed import LinkingParsed
|
from bu4.linking.states.linkingparsed import LinkingParsed
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.linking.targets.alchain import ALChain
|
from bu4.linking.targets.alchain import ALChain
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('prepare',)
|
__all__ = ('prepare',)
|
||||||
|
|
||||||
@ -16,14 +16,13 @@ def _afterlinking_iteration(state: AfterLinking) -> LinkingState:
|
|||||||
elif isinstance(state.state, AfterLinking):
|
elif isinstance(state.state, AfterLinking):
|
||||||
state.state, state.target = state.state.state, ALChain(state.state.target, state.target)
|
state.state, state.target = state.state.state, ALChain(state.state.target, state.target)
|
||||||
elif isinstance(state.state, LinkingParsed):
|
elif isinstance(state.state, LinkingParsed):
|
||||||
state.state = state.state.parsed.link(state.state.promise).link()
|
state.state = state.state.parsed.link(state.state.promise)
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
return state
|
return state
|
||||||
|
|
||||||
|
|
||||||
def prepare(linked: Linked) -> Linked:
|
def prepare(state: LinkingState) -> Linked:
|
||||||
state = linked.link()
|
|
||||||
while True:
|
while True:
|
||||||
if isinstance(state, LinkingFinished):
|
if isinstance(state, LinkingFinished):
|
||||||
return state.linked
|
return state.linked
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('LinkingFinished',)
|
__all__ = ('LinkingFinished',)
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
|
||||||
|
|
||||||
__all__ = ('LinkingParsed',)
|
__all__ = ('LinkingParsed',)
|
||||||
|
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
class LinkingParsed(LinkingState):
|
class LinkingParsed(LinkingState):
|
||||||
def __init__(self, promise: set[bytes], parsed: Parsed):
|
def __init__(self, promise: set[bytes], parsed: Parsed):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
__all__ = ('LinkingState',)
|
__all__ = ('LinkingState',)
|
||||||
|
|
||||||
|
|
||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
class LinkingState:
|
class LinkingState:
|
||||||
pass
|
pass
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
from bu4.linking.states.afterlinking import AfterLinking
|
from bu4.linking.states.afterlinking import AfterLinking
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.linking.targets.altarget import ALTarget
|
from bu4.linking.targets.altarget import ALTarget
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('ALChain',)
|
__all__ = ('ALChain',)
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ from typing import Callable
|
|||||||
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.linking.targets.altarget import ALTarget
|
from bu4.linking.targets.altarget import ALTarget
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('ALLambda',)
|
__all__ = ('ALLambda',)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
from bu4.parsing.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
|
|
||||||
__all__ = ('ALTarget',)
|
__all__ = ('ALTarget',)
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
__all__ = ('AbstractParser',)
|
__all__ = ('AbstractParser',)
|
||||||
|
|
||||||
|
|
||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
class AbstractParser:
|
class AbstractParser:
|
||||||
def read(self) -> int:
|
def read(self) -> int:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
from bu4.evaluation.av.aftervalue import AfterValue
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
|
||||||
from bu4.evaluation.constructs.elinked import ELinked
|
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
|
||||||
from bu4.evaluation.targets.avcall import AVCall
|
|
||||||
from bu4.linking.states.afterlinking import AfterLinking
|
|
||||||
from bu4.linking.states.linkingfinished import LinkingFinished
|
|
||||||
from bu4.linking.states.linkingparsed import LinkingParsed
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
|
||||||
from bu4.linking.targets.allambda import ALLambda
|
|
||||||
from bu4.parsing.constructs.linked import Linked, Parsed
|
|
||||||
|
|
||||||
__all__ = ('PCall',)
|
|
||||||
|
|
||||||
|
|
||||||
class LCall(Linked):
|
|
||||||
argument: Linked
|
|
||||||
lambda_: Linked
|
|
||||||
|
|
||||||
def __init__(self, promise: set[bytes], argument: Parsed, lambda_: Parsed):
|
|
||||||
self.promise = promise
|
|
||||||
self._argument = argument
|
|
||||||
self._lambda = lambda_
|
|
||||||
|
|
||||||
def link(self) -> LinkingState:
|
|
||||||
return AfterLinking(
|
|
||||||
LinkingParsed(self.promise, self._argument),
|
|
||||||
ALLambda(self._given_argument)
|
|
||||||
)
|
|
||||||
|
|
||||||
def _given_argument(self, argument: Linked) -> LinkingState:
|
|
||||||
self.argument = argument
|
|
||||||
return AfterLinking(
|
|
||||||
LinkingParsed(self.promise, self._lambda),
|
|
||||||
ALLambda(self._given_lambda)
|
|
||||||
)
|
|
||||||
|
|
||||||
def _given_lambda(self, lambda_) -> LinkingState:
|
|
||||||
self.lambda_ = lambda_
|
|
||||||
self.future = self.argument.future | self.lambda_.future
|
|
||||||
return LinkingFinished(self)
|
|
||||||
|
|
||||||
def evaluable(self, env: envtype) -> Evaluable:
|
|
||||||
return AfterValue(ELinked(env, self.lambda_), AVCall(env, self.argument))
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f'/{self.argument}{self.lambda_}'
|
|
||||||
|
|
||||||
def unlink(self) -> Parsed:
|
|
||||||
return PCall(self._argument, self._lambda)
|
|
||||||
|
|
||||||
|
|
||||||
class PCall(Parsed):
|
|
||||||
def __init__(self, argument: Parsed, lambda_: Parsed):
|
|
||||||
self.argument = argument
|
|
||||||
self.lambda_ = lambda_
|
|
||||||
|
|
||||||
def link(self, promise: set[bytes]) -> Linked:
|
|
||||||
return LCall(promise, self.argument, self.lambda_)
|
|
@ -1,26 +0,0 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
|
||||||
|
|
||||||
__all__ = ('Linked', 'Parsed',)
|
|
||||||
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
|
||||||
|
|
||||||
|
|
||||||
class Linked:
|
|
||||||
future: set[bytes]
|
|
||||||
|
|
||||||
def link(self) -> LinkingState:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def evaluable(self, env: envtype) -> Evaluable:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def unlink(self) -> 'Parsed':
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class Parsed:
|
|
||||||
def link(self, promise: set[bytes]) -> Linked:
|
|
||||||
raise NotImplementedError
|
|
@ -1,53 +0,0 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
|
||||||
from bu4.evaluation.constructs.elambda import ELambda
|
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
|
||||||
from bu4.linking.states.afterlinking import AfterLinking
|
|
||||||
from bu4.linking.states.linkingfinished import LinkingFinished
|
|
||||||
from bu4.linking.states.linkingparsed import LinkingParsed
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
|
||||||
from bu4.linking.targets.allambda import ALLambda
|
|
||||||
from bu4.parsing.constructs.linked import Linked, Parsed
|
|
||||||
|
|
||||||
__all__ = ('PLambda',)
|
|
||||||
|
|
||||||
|
|
||||||
class LLambda(Linked):
|
|
||||||
value: Linked
|
|
||||||
|
|
||||||
def __init__(self, promise: set[bytes], name: bytes, value: Parsed):
|
|
||||||
assert name not in promise, f'overloaded: {name}'
|
|
||||||
self.promise = promise
|
|
||||||
self.name = name
|
|
||||||
self._value = value
|
|
||||||
|
|
||||||
def link(self) -> LinkingState:
|
|
||||||
return AfterLinking(LinkingParsed(self.promise | {self.name}, self._value), ALLambda(self._given_value))
|
|
||||||
|
|
||||||
def _given_value(self, value: Linked) -> LinkingState:
|
|
||||||
self.value = value
|
|
||||||
self.future = self.value.future - {self.name}
|
|
||||||
return LinkingFinished(self)
|
|
||||||
|
|
||||||
def evaluable(self, env: envtype) -> Evaluable:
|
|
||||||
return ELambda(
|
|
||||||
{name: container for name, container in env.items() if name in self.future},
|
|
||||||
self.name,
|
|
||||||
self.value
|
|
||||||
)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f'({self.name.decode()}){self.value}'
|
|
||||||
|
|
||||||
def unlink(self) -> Parsed:
|
|
||||||
return PLambda(self.name, self._value)
|
|
||||||
|
|
||||||
|
|
||||||
class PLambda(Parsed):
|
|
||||||
def __init__(self, name: bytes, value: Parsed):
|
|
||||||
self.name = name
|
|
||||||
self.value = value
|
|
||||||
|
|
||||||
def link(self, promise: set[bytes]) -> Linked:
|
|
||||||
return LLambda(promise, self.name, self.value)
|
|
@ -1,36 +0,0 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
|
||||||
from bu4.linking.states.linkingfinished import LinkingFinished
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
|
||||||
from bu4.parsing.constructs.linked import Linked, Parsed
|
|
||||||
|
|
||||||
__all__ = ('PName',)
|
|
||||||
|
|
||||||
|
|
||||||
class LName(Linked):
|
|
||||||
def __init__(self, promise: set[bytes], name: bytes):
|
|
||||||
assert name in promise, f'undefined: {name}'
|
|
||||||
self.name = name
|
|
||||||
self.future = {name}
|
|
||||||
|
|
||||||
def link(self) -> LinkingState:
|
|
||||||
return LinkingFinished(self)
|
|
||||||
|
|
||||||
def evaluable(self, env: envtype) -> Evaluable:
|
|
||||||
return env[self.name]
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f'[{self.name.decode()}]'
|
|
||||||
|
|
||||||
def unlink(self) -> Parsed:
|
|
||||||
return PName(self.name)
|
|
||||||
|
|
||||||
|
|
||||||
class PName(Parsed):
|
|
||||||
def __init__(self, name: bytes):
|
|
||||||
self.name = name
|
|
||||||
|
|
||||||
def link(self, promise: set[bytes]) -> Linked:
|
|
||||||
return LName(promise, self.name)
|
|
@ -1,32 +0,0 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
from bu4.evaluation.av.envtype import envtype
|
|
||||||
from bu4.evaluation.constructs.enull import ENull
|
|
||||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
|
||||||
from bu4.linking.states.linkingfinished import LinkingFinished
|
|
||||||
from bu4.linking.states.linkingstate import LinkingState
|
|
||||||
from bu4.parsing.constructs.linked import Linked, Parsed
|
|
||||||
|
|
||||||
__all__ = ('PNull',)
|
|
||||||
|
|
||||||
|
|
||||||
class LNull(Linked):
|
|
||||||
def __init__(self):
|
|
||||||
self.future = set()
|
|
||||||
|
|
||||||
def link(self) -> LinkingState:
|
|
||||||
return LinkingFinished(self)
|
|
||||||
|
|
||||||
def evaluable(self, env: envtype) -> Evaluable:
|
|
||||||
return ENull()
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return '?'
|
|
||||||
|
|
||||||
def unlink(self) -> Parsed:
|
|
||||||
return PNull()
|
|
||||||
|
|
||||||
|
|
||||||
class PNull(Parsed):
|
|
||||||
def link(self, promise: set[bytes]) -> Linked:
|
|
||||||
return LNull()
|
|
10
bu4/parsing/constructs/parsed.py
Normal file
10
bu4/parsing/constructs/parsed.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
__all__ = ('Parsed',)
|
||||||
|
|
||||||
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
|
|
||||||
|
|
||||||
|
class Parsed:
|
||||||
|
def link(self, promise: set[bytes]) -> LinkingState:
|
||||||
|
raise NotImplementedError
|
30
bu4/parsing/constructs/pcall.py
Normal file
30
bu4/parsing/constructs/pcall.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
__all__ = ('PCall',)
|
||||||
|
|
||||||
|
from bu4.linking.constructs.lcall import LCall
|
||||||
|
from bu4.linking.states.afterlinking import AfterLinking
|
||||||
|
from bu4.linking.states.linkingfinished import LinkingFinished
|
||||||
|
from bu4.linking.states.linkingparsed import LinkingParsed
|
||||||
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
|
from bu4.linking.targets.allambda import ALLambda
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
|
class PCall(Parsed):
|
||||||
|
def __init__(self, argument: Parsed, lambda_: Parsed):
|
||||||
|
self.argument = argument
|
||||||
|
self.lambda_ = lambda_
|
||||||
|
|
||||||
|
def link(self, promise: set[bytes]) -> LinkingState:
|
||||||
|
return AfterLinking(
|
||||||
|
LinkingParsed(promise, self.argument),
|
||||||
|
ALLambda(
|
||||||
|
lambda argument: AfterLinking(
|
||||||
|
LinkingParsed(promise, self.lambda_),
|
||||||
|
ALLambda(
|
||||||
|
lambda lambda_: LinkingFinished(LCall(argument, lambda_))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
32
bu4/parsing/constructs/plambda.py
Normal file
32
bu4/parsing/constructs/plambda.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
__all__ = ('PLambda',)
|
||||||
|
|
||||||
|
from bu4.linking.constructs.llambda import LLambda
|
||||||
|
from bu4.linking.states.afterlinking import AfterLinking
|
||||||
|
from bu4.linking.states.linkingfinished import LinkingFinished
|
||||||
|
from bu4.linking.states.linkingparsed import LinkingParsed
|
||||||
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
|
from bu4.linking.targets.allambda import ALLambda
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
|
class PLambda(Parsed):
|
||||||
|
def __init__(self, name: bytes, value: Parsed):
|
||||||
|
self.name = name
|
||||||
|
self.value = value
|
||||||
|
|
||||||
|
def link(self, promise: set[bytes]) -> LinkingState:
|
||||||
|
assert self.name not in promise, f'overloaded: {self.name}'
|
||||||
|
return AfterLinking(
|
||||||
|
LinkingParsed(
|
||||||
|
promise | {self.name},
|
||||||
|
self.value
|
||||||
|
),
|
||||||
|
ALLambda(
|
||||||
|
lambda value: LinkingFinished(LLambda(
|
||||||
|
self.name,
|
||||||
|
value
|
||||||
|
))
|
||||||
|
)
|
||||||
|
)
|
17
bu4/parsing/constructs/pname.py
Normal file
17
bu4/parsing/constructs/pname.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
__all__ = ('PName',)
|
||||||
|
|
||||||
|
from bu4.linking.constructs.lname import LName
|
||||||
|
from bu4.linking.states.linkingfinished import LinkingFinished
|
||||||
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
|
class PName(Parsed):
|
||||||
|
def __init__(self, name: bytes):
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
def link(self, promise: set[bytes]) -> LinkingState:
|
||||||
|
assert self.name in promise, f'undefined: {self.name}'
|
||||||
|
return LinkingFinished(LName(self.name))
|
13
bu4/parsing/constructs/pnull.py
Normal file
13
bu4/parsing/constructs/pnull.py
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
|
__all__ = ('PNull',)
|
||||||
|
|
||||||
|
from bu4.linking.constructs.lnull import LNull
|
||||||
|
from bu4.linking.states.linkingfinished import LinkingFinished
|
||||||
|
from bu4.linking.states.linkingstate import LinkingState
|
||||||
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
|
|
||||||
|
|
||||||
|
class PNull(Parsed):
|
||||||
|
def link(self, promise: set[bytes]) -> LinkingState:
|
||||||
|
return LinkingFinished(LNull())
|
@ -4,10 +4,10 @@ from io import BytesIO
|
|||||||
|
|
||||||
from bu4.parsing.abstractparser import AbstractParser
|
from bu4.parsing.abstractparser import AbstractParser
|
||||||
from bu4.parsing.codes import *
|
from bu4.parsing.codes import *
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.constructs.llambda import PLambda
|
from bu4.parsing.constructs.plambda import PLambda
|
||||||
from bu4.parsing.constructs.lname import PName
|
from bu4.parsing.constructs.pname import PName
|
||||||
from bu4.parsing.constructs.lnull import PNull
|
from bu4.parsing.constructs.pnull import PNull
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
from bu4.parsing.states.psafter import PSAfter
|
from bu4.parsing.states.psafter import PSAfter
|
||||||
from bu4.parsing.states.pscall import pscall
|
from bu4.parsing.states.pscall import pscall
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
__all__ = ('ParseState',)
|
__all__ = ('ParseState',)
|
||||||
|
|
||||||
|
|
||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
|
||||||
|
|
||||||
class ParseState:
|
class ParseState:
|
||||||
pass
|
pass
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.constructs.lcall import PCall
|
from bu4.parsing.constructs.pcall import PCall
|
||||||
from bu4.parsing.states.psafter import PSAfter
|
from bu4.parsing.states.psafter import PSAfter
|
||||||
from bu4.parsing.states.psfinal import PSFinal
|
from bu4.parsing.states.psfinal import PSFinal
|
||||||
from bu4.parsing.states.psread import PSRead
|
from bu4.parsing.states.psread import PSRead
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
|
|
||||||
__all__ = ('PSFinal',)
|
__all__ = ('PSFinal',)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
from bu4.parsing.states.psafter import PSAfter
|
from bu4.parsing.states.psafter import PSAfter
|
||||||
from bu4.parsing.targets.pstarget import PSTarget
|
from bu4.parsing.targets.pstarget import PSTarget
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.abstractparser import AbstractParser
|
from bu4.parsing.abstractparser import AbstractParser
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
from bu4.parsing.states.psfinal import PSFinal
|
from bu4.parsing.states.psfinal import PSFinal
|
||||||
from bu4.parsing.targets.pstarget import PSTarget
|
from bu4.parsing.targets.pstarget import PSTarget
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
from bu4.parsing.targets.pstarget import PSTarget
|
from bu4.parsing.targets.pstarget import PSTarget
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.states.parsestate import ParseState
|
from bu4.parsing.states.parsestate import ParseState
|
||||||
|
|
||||||
__all__ = ('PSTarget',)
|
__all__ = ('PSTarget',)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.constructs.linked import Parsed
|
from bu4.parsing.constructs.parsed import Parsed
|
||||||
from bu4.parsing.parser import Parser
|
from bu4.parsing.parser import Parser
|
||||||
|
|
||||||
__all__ = ('parse',)
|
__all__ = ('parse',)
|
||||||
|
Loading…
Reference in New Issue
Block a user