parse_indexed
This commit is contained in:
parent
2b3a202a52
commit
d51d6a38e5
@ -26,4 +26,4 @@ class ILambda(Indexed):
|
||||
return f'(){self.value}'
|
||||
|
||||
def __bytes__(self):
|
||||
return bytes([CODE_MAKE, len(self.table), *self.table, *bytes(self.value)])
|
||||
return bytes([CODE_MAKE, self.memoize, len(self.table), *self.table, *bytes(self.value)])
|
||||
|
33
bu4/indexing/extensions/xicall.py
Normal file
33
bu4/indexing/extensions/xicall.py
Normal file
@ -0,0 +1,33 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.icall import ICall
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.parsing.codes import CODE_CALL
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('XICall',)
|
||||
|
||||
|
||||
class XICall(Extension[Indexed], code=CODE_CALL):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
return AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda argument: AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda lambda_: TransformFinished(
|
||||
ICall(
|
||||
argument,
|
||||
lambda_
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
23
bu4/indexing/extensions/xidlyd.py
Normal file
23
bu4/indexing/extensions/xidlyd.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.idelayed import IDelayed
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.parsing.codes import CODE_DLYD
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('XIDlyd',)
|
||||
|
||||
|
||||
class XIDlyd(Extension[Indexed], code=CODE_DLYD):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
return AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda value: TransformFinished(IDelayed(value))
|
||||
)
|
||||
)
|
25
bu4/indexing/extensions/ximake.py
Normal file
25
bu4/indexing/extensions/ximake.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.ilambda import ILambda
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.parsing.codes import CODE_MAKE
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('XIMake',)
|
||||
|
||||
|
||||
class XIMake(Extension[Indexed], code=CODE_MAKE):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
memoize = bool(self.parser.read())
|
||||
table = [self.parser.read() for _ in range(self.parser.read())]
|
||||
return AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda value: TransformFinished(ILambda(value, table, memoize=memoize))
|
||||
)
|
||||
)
|
15
bu4/indexing/extensions/xiname.py
Normal file
15
bu4/indexing/extensions/xiname.py
Normal file
@ -0,0 +1,15 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.iname import IName
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.parsing.codes import CODE_NAME
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
||||
__all__ = ('XIName',)
|
||||
|
||||
|
||||
class XIName(Extension[Indexed], code=CODE_NAME):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
return TransformFinished(IName(self.parser.read()))
|
15
bu4/indexing/extensions/xinull.py
Normal file
15
bu4/indexing/extensions/xinull.py
Normal file
@ -0,0 +1,15 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.indexing.constructs.inull import INull
|
||||
from bu4.parsing.codes import CODE_NULL
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
||||
__all__ = ('XINull',)
|
||||
|
||||
|
||||
class XINull(Extension[Indexed], code=CODE_NULL):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
return TransformFinished(INull())
|
15
bu4/indexing/extensions/xixcpt.py
Normal file
15
bu4/indexing/extensions/xixcpt.py
Normal file
@ -0,0 +1,15 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.iexception import IException
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.parsing.codes import CODE_XCPT
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
||||
__all__ = ('XIXcpt',)
|
||||
|
||||
|
||||
class XIXcpt(Extension[Indexed], code=CODE_XCPT):
|
||||
def apply(self) -> TransformState[Indexed]:
|
||||
return TransformFinished(IException(self.parser.parse_name()))
|
28
bu4/indexing/toolchain/parse_indexed.py
Normal file
28
bu4/indexing/toolchain/parse_indexed.py
Normal file
@ -0,0 +1,28 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.indexing.extensions.xicall import XICall
|
||||
from bu4.indexing.extensions.xidlyd import XIDlyd
|
||||
from bu4.indexing.extensions.ximake import XIMake
|
||||
from bu4.indexing.extensions.xiname import XIName
|
||||
from bu4.indexing.extensions.xinull import XINull
|
||||
from bu4.indexing.extensions.xixcpt import XIXcpt
|
||||
from bu4.parsing.parser import Parser
|
||||
from bu4.transform.transform import transform
|
||||
|
||||
__all__ = ('parse_indexed',)
|
||||
|
||||
|
||||
def parse_indexed(source: bytes) -> Indexed:
|
||||
parser = Parser(
|
||||
source,
|
||||
[
|
||||
XINull,
|
||||
XICall,
|
||||
XIMake,
|
||||
XIName,
|
||||
XIXcpt,
|
||||
XIDlyd,
|
||||
]
|
||||
)
|
||||
return transform(parser.parse())
|
@ -2,9 +2,9 @@
|
||||
|
||||
from bu4.evaluation.constructs.evalue import EValue
|
||||
from bu4.evaluation.sync import sync
|
||||
from bu4.parsing.toolchain.parse import parse
|
||||
from bu4.parsing.toolchain.stdext import standard_extension
|
||||
from bu4.parsing.toolchain.transply import transply
|
||||
from bu4.linkable.toolchain.parse import parse
|
||||
from bu4.linkable.toolchain.stdext import standard_extension
|
||||
from bu4.linkable.toolchain.transply import transply
|
||||
from bu4.transform.transform import transform
|
||||
|
||||
__all__ = ('isynced',)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.linking.constructs.lcall import LCall
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstart import TransformStart
|
27
bu4/linkable/constructs/pdelayed.py
Normal file
27
bu4/linkable/constructs/pdelayed.py
Normal file
@ -0,0 +1,27 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linking.constructs.ldelayed import LDelayed
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstart import TransformStart
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('PDelayed',)
|
||||
|
||||
|
||||
class PDelayed(Parsed):
|
||||
def __init__(self, value: Parsed):
|
||||
self.value = value
|
||||
|
||||
def link(self, promise: set[bytes]) -> TransformState[Linked]:
|
||||
return AfterTransform(
|
||||
TransformStart(lambda: self.value.link(promise)),
|
||||
ATLambda(
|
||||
lambda value: TransformFinished(LDelayed(
|
||||
value
|
||||
))
|
||||
)
|
||||
)
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.linking.constructs.lexception import LException
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.linking.constructs.llambda import LLambda
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstart import TransformStart
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.linking.constructs.lname import LName
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.linking.constructs.lnull import LNull
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
33
bu4/linkable/extensions/xcall.py
Normal file
33
bu4/linkable/extensions/xcall.py
Normal file
@ -0,0 +1,33 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.pcall import PCall
|
||||
from bu4.parsing.codes import CODE_CALL
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('XCall',)
|
||||
|
||||
|
||||
class XCall(Extension[Parsed], code=CODE_CALL):
|
||||
def apply(self) -> TransformState[Parsed]:
|
||||
return AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda argument: AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda lambda_: TransformFinished(
|
||||
PCall(
|
||||
argument,
|
||||
lambda_
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
23
bu4/linkable/extensions/xdlyd.py
Normal file
23
bu4/linkable/extensions/xdlyd.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.pdelayed import PDelayed
|
||||
from bu4.parsing.codes import CODE_DLYD
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('XDlyd',)
|
||||
|
||||
|
||||
class XDlyd(Extension[Parsed], code=CODE_DLYD):
|
||||
def apply(self) -> TransformState[Parsed]:
|
||||
return AfterTransform(
|
||||
ParsingRead(self.parser),
|
||||
ATLambda(
|
||||
lambda value: TransformFinished(PDelayed(value))
|
||||
)
|
||||
)
|
@ -1,8 +1,8 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.plambda import PLambda
|
||||
from bu4.parsing.codes import CODE_MAKE
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.constructs.plambda import PLambda
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
@ -1,8 +1,8 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_NAME
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.constructs.pname import PName
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.pname import PName
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
@ -1,8 +1,8 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.pnull import PNull
|
||||
from bu4.parsing.codes import CODE_NULL
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.constructs.pnull import PNull
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
@ -1,7 +1,7 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_QOPN, CODE_QCLS
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.parsing.targets.apendswith import APEndsWith
|
@ -1,7 +1,7 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_QUOT
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.parsing.targets.apendswith import APEndsWith
|
@ -1,7 +1,7 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_SKIP
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.transformstate import TransformState
|
@ -1,8 +1,8 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_XCPT
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.constructs.pexception import PException
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.pexception import PException
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
@ -2,9 +2,10 @@
|
||||
|
||||
from typing import Iterable, Type
|
||||
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.parser import Parser
|
||||
from bu4.transform.transform import transform
|
||||
|
||||
__all__ = ('parse',)
|
||||
|
||||
@ -14,4 +15,4 @@ def parse(source: bytes, extensions: Iterable[Type[Extension[Parsed]]]) -> Parse
|
||||
source,
|
||||
extensions
|
||||
)
|
||||
return parser.parse()
|
||||
return transform(parser.parse())
|
25
bu4/linkable/toolchain/stdext.py
Normal file
25
bu4/linkable/toolchain/stdext.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.linkable.extensions.xcall import XCall
|
||||
from bu4.linkable.extensions.xdlyd import XDlyd
|
||||
from bu4.linkable.extensions.xmake import XMake
|
||||
from bu4.linkable.extensions.xname import XName
|
||||
from bu4.linkable.extensions.xnull import XNull
|
||||
from bu4.linkable.extensions.xqopn import XQopn
|
||||
from bu4.linkable.extensions.xquot import XQuot
|
||||
from bu4.linkable.extensions.xskip import XSkip
|
||||
from bu4.linkable.extensions.xxcpt import XXcpt
|
||||
|
||||
__all__ = ('standard_extension',)
|
||||
|
||||
standard_extension = (
|
||||
XNull,
|
||||
XCall,
|
||||
XMake,
|
||||
XName,
|
||||
XSkip,
|
||||
XQuot,
|
||||
XQopn,
|
||||
XXcpt,
|
||||
XDlyd,
|
||||
)
|
@ -38,6 +38,8 @@ def transply(source: str) -> bytes:
|
||||
transplied.write(bytes([CODE_QCLS]))
|
||||
elif c in '«':
|
||||
transplied.write(bytes([CODE_QOPN, CODE_XCPT]))
|
||||
elif c in '&':
|
||||
transplied.write(bytes([CODE_DLYD]))
|
||||
else:
|
||||
transplied.write(c.encode())
|
||||
return transplied.getvalue()
|
38
bu4/linking/constructs/ldelayed.py
Normal file
38
bu4/linking/constructs/ldelayed.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.evaluation.av.envtype import envtype
|
||||
from bu4.evaluation.constructs.edelayed import EDelayed
|
||||
from bu4.evaluation.constructs.evaluable import Evaluable
|
||||
from bu4.indexing.constructs.idelayed import IDelayed
|
||||
from bu4.indexing.constructs.indexed import Indexed
|
||||
from bu4.linking.constructs.linked import Linked
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstart import TransformStart
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('LDelayed',)
|
||||
|
||||
|
||||
class LDelayed(Linked):
|
||||
value: Linked
|
||||
|
||||
def __init__(self, value: Linked):
|
||||
self.value = value
|
||||
self.future = self.value.future
|
||||
self.multifuture = self.future
|
||||
|
||||
def attach(self, env: envtype) -> Evaluable:
|
||||
return EDelayed(env, self.value)
|
||||
|
||||
def index(self, promise: list[bytes]) -> TransformState[Indexed]:
|
||||
return AfterTransform(
|
||||
TransformStart(lambda: self.value.index(promise)),
|
||||
ATLambda(
|
||||
lambda value: TransformFinished(IDelayed(value))
|
||||
)
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f'(){self.value}'
|
@ -2,7 +2,7 @@
|
||||
|
||||
from bu4.evaluation.av.envtype import envtype
|
||||
from bu4.evaluation.constructs.eattachable import EAttachable
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.linkable.constructs.parsed import Parsed
|
||||
from bu4.transform.transform import transform
|
||||
|
||||
__all__ = ('evaluable_from_parsed',)
|
||||
|
@ -1,14 +0,0 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.codes import CODE_CALL
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsing_call import parsing_call
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
||||
__all__ = ('XCall',)
|
||||
|
||||
|
||||
class XCall(Extension[Parsed], code=CODE_CALL):
|
||||
def apply(self) -> TransformState[Parsed]:
|
||||
return parsing_call(self.parser)
|
@ -7,10 +7,13 @@ from bu4.parsing.abstractparser import AbstractParser
|
||||
from bu4.parsing.extensions.abstractextension import AbstractExtension
|
||||
from bu4.parsing.extensions.extension import Extension
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
|
||||
__all__ = ('Parser',)
|
||||
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
|
||||
from bu4.transform.transform import transform
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
|
||||
@ -41,9 +44,5 @@ class Parser(AbstractParser[T]):
|
||||
raise ValueError(f'unknown control: {hex(code)}')
|
||||
return extension
|
||||
|
||||
def parse(self) -> T:
|
||||
state = ParsingRead(self)
|
||||
while True:
|
||||
if isinstance(state, TransformFinished):
|
||||
return state.transformed
|
||||
state = state.next()
|
||||
def parse(self) -> TransformState[T]:
|
||||
return ParsingRead(self)
|
||||
|
@ -1,31 +0,0 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.abstractparser import AbstractParser
|
||||
from bu4.parsing.constructs.parsed import Parsed
|
||||
from bu4.parsing.constructs.pcall import PCall
|
||||
from bu4.parsing.states.parsingread import ParsingRead
|
||||
from bu4.transform.states.aftertransform import AfterTransform
|
||||
from bu4.transform.states.transformfinished import TransformFinished
|
||||
from bu4.transform.states.transformstate import TransformState
|
||||
from bu4.transform.targets.atlambda import ATLambda
|
||||
|
||||
__all__ = ('parsing_call',)
|
||||
|
||||
|
||||
def parsing_call(parser: AbstractParser[Parsed]) -> TransformState[Parsed]:
|
||||
return AfterTransform(
|
||||
ParsingRead(parser),
|
||||
ATLambda(
|
||||
lambda argument: AfterTransform(
|
||||
ParsingRead(parser),
|
||||
ATLambda(
|
||||
lambda lambda_: TransformFinished(
|
||||
PCall(
|
||||
argument,
|
||||
lambda_
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
@ -1,23 +0,0 @@
|
||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||
|
||||
from bu4.parsing.extensions.xcall import XCall
|
||||
from bu4.parsing.extensions.xmake import XMake
|
||||
from bu4.parsing.extensions.xname import XName
|
||||
from bu4.parsing.extensions.xnull import XNull
|
||||
from bu4.parsing.extensions.xqopn import XQopn
|
||||
from bu4.parsing.extensions.xquot import XQuot
|
||||
from bu4.parsing.extensions.xskip import XSkip
|
||||
from bu4.parsing.extensions.xxcpt import XXcpt
|
||||
|
||||
__all__ = ('standard_extension',)
|
||||
|
||||
standard_extension = (
|
||||
XNull,
|
||||
XCall,
|
||||
XMake,
|
||||
XName,
|
||||
XSkip,
|
||||
XQuot,
|
||||
XQopn,
|
||||
XXcpt,
|
||||
)
|
@ -3,9 +3,9 @@
|
||||
from bu4.evaluation.constructs.evalue import EValue
|
||||
from bu4.evaluation.sync import sync
|
||||
from bu4.linking.evaluable_from_parsed import evaluable_from_parsed
|
||||
from bu4.parsing.toolchain.parse import parse
|
||||
from bu4.parsing.toolchain.stdext import standard_extension
|
||||
from bu4.parsing.toolchain.transply import transply
|
||||
from bu4.linkable.toolchain.parse import parse
|
||||
from bu4.linkable.toolchain.stdext import standard_extension
|
||||
from bu4.linkable.toolchain.transply import transply
|
||||
|
||||
__all__ = ('synced',)
|
||||
|
||||
|
3
main.py
3
main.py
@ -7,7 +7,7 @@ from bu4.common_interface import with_common_interface
|
||||
from bu4.evaluation.constructs.proxy import antiproxy, eproxy
|
||||
from bu4.evaluation.sync import sync
|
||||
from bu4.isynced import isynced as synced
|
||||
from bu4.parsing.toolchain.readfile import readfile
|
||||
from bu4.linkable.toolchain.readfile import readfile
|
||||
from bu4.tracing.probe import Probe
|
||||
from bu4.tracing.trace import trace
|
||||
from timesample import TimeSample
|
||||
@ -86,7 +86,6 @@ with TimeSample('all'):
|
||||
TimeSample.print(*prefix, '...')
|
||||
with TimeSample('sys6'):
|
||||
sys6 = synced(readfile('src/sys6')).call(synced('?'))
|
||||
|
||||
for _ in range(100):
|
||||
sys6 = sys6.next()
|
||||
print(sys6)
|
||||
|
12
src/sys6.bu4
12
src/sys6.bu4
@ -1,6 +1,11 @@
|
||||
@@
|
||||
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
&
|
||||
/
|
||||
[ID]
|
||||
[YC]
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
###
|
||||
/(g)
|
||||
(x)
|
||||
/
|
||||
@ -8,11 +13,6 @@
|
||||
[g]
|
||||
[YC]
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
(_)
|
||||
/
|
||||
[ID]
|
||||
[YC]
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
(_)
|
||||
/ < (x) /[x][SC] > [SC]
|
||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||
|
Loading…
Reference in New Issue
Block a user