From d51d6a38e568777bd6eb5178bb48aa34b57db758 Mon Sep 17 00:00:00 2001 From: timotheyca Date: Wed, 8 Sep 2021 13:49:09 +0300 Subject: [PATCH] parse_indexed --- bu4/indexing/constructs/ilambda.py | 2 +- bu4/indexing/extensions/xicall.py | 33 ++++++++++++++++ bu4/indexing/extensions/xidlyd.py | 23 +++++++++++ bu4/indexing/extensions/ximake.py | 25 ++++++++++++ bu4/indexing/extensions/xiname.py | 15 ++++++++ bu4/indexing/extensions/xinull.py | 15 ++++++++ bu4/indexing/extensions/xixcpt.py | 15 ++++++++ bu4/indexing/toolchain/parse_indexed.py | 28 ++++++++++++++ bu4/isynced.py | 6 +-- .../constructs/parsed.py | 0 bu4/{parsing => linkable}/constructs/pcall.py | 2 +- bu4/linkable/constructs/pdelayed.py | 27 +++++++++++++ .../constructs/pexception.py | 2 +- .../constructs/plambda.py | 2 +- bu4/{parsing => linkable}/constructs/pname.py | 2 +- bu4/{parsing => linkable}/constructs/pnull.py | 2 +- bu4/linkable/extensions/xcall.py | 33 ++++++++++++++++ bu4/linkable/extensions/xdlyd.py | 23 +++++++++++ bu4/{parsing => linkable}/extensions/xmake.py | 4 +- bu4/{parsing => linkable}/extensions/xname.py | 4 +- bu4/{parsing => linkable}/extensions/xnull.py | 4 +- bu4/{parsing => linkable}/extensions/xqopn.py | 2 +- bu4/{parsing => linkable}/extensions/xquot.py | 2 +- bu4/{parsing => linkable}/extensions/xskip.py | 2 +- bu4/{parsing => linkable}/extensions/xxcpt.py | 4 +- bu4/{parsing => linkable}/toolchain/parse.py | 5 ++- .../toolchain/readfile.py | 0 bu4/linkable/toolchain/stdext.py | 25 ++++++++++++ .../toolchain/transply.py | 2 + bu4/linking/constructs/ldelayed.py | 38 +++++++++++++++++++ bu4/linking/evaluable_from_parsed.py | 2 +- bu4/parsing/extensions/xcall.py | 14 ------- bu4/parsing/parser.py | 13 +++---- bu4/parsing/states/parsing_call.py | 31 --------------- bu4/parsing/toolchain/stdext.py | 23 ----------- bu4/synced.py | 6 +-- main.py | 3 +- src/sys6.bu4 | 12 +++--- 38 files changed, 342 insertions(+), 109 deletions(-) create mode 100644 bu4/indexing/extensions/xicall.py create mode 100644 bu4/indexing/extensions/xidlyd.py create mode 100644 bu4/indexing/extensions/ximake.py create mode 100644 bu4/indexing/extensions/xiname.py create mode 100644 bu4/indexing/extensions/xinull.py create mode 100644 bu4/indexing/extensions/xixcpt.py create mode 100644 bu4/indexing/toolchain/parse_indexed.py rename bu4/{parsing => linkable}/constructs/parsed.py (100%) rename bu4/{parsing => linkable}/constructs/pcall.py (95%) create mode 100644 bu4/linkable/constructs/pdelayed.py rename bu4/{parsing => linkable}/constructs/pexception.py (91%) rename bu4/{parsing => linkable}/constructs/plambda.py (95%) rename bu4/{parsing => linkable}/constructs/pname.py (92%) rename bu4/{parsing => linkable}/constructs/pnull.py (89%) create mode 100644 bu4/linkable/extensions/xcall.py create mode 100644 bu4/linkable/extensions/xdlyd.py rename bu4/{parsing => linkable}/extensions/xmake.py (88%) rename bu4/{parsing => linkable}/extensions/xname.py (82%) rename bu4/{parsing => linkable}/extensions/xnull.py (81%) rename bu4/{parsing => linkable}/extensions/xqopn.py (92%) rename bu4/{parsing => linkable}/extensions/xquot.py (92%) rename bu4/{parsing => linkable}/extensions/xskip.py (89%) rename bu4/{parsing => linkable}/extensions/xxcpt.py (81%) rename bu4/{parsing => linkable}/toolchain/parse.py (72%) rename bu4/{parsing => linkable}/toolchain/readfile.py (100%) create mode 100644 bu4/linkable/toolchain/stdext.py rename bu4/{parsing => linkable}/toolchain/transply.py (95%) create mode 100644 bu4/linking/constructs/ldelayed.py delete mode 100644 bu4/parsing/extensions/xcall.py delete mode 100644 bu4/parsing/states/parsing_call.py delete mode 100644 bu4/parsing/toolchain/stdext.py diff --git a/bu4/indexing/constructs/ilambda.py b/bu4/indexing/constructs/ilambda.py index e9a315d..9fead31 100644 --- a/bu4/indexing/constructs/ilambda.py +++ b/bu4/indexing/constructs/ilambda.py @@ -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)]) diff --git a/bu4/indexing/extensions/xicall.py b/bu4/indexing/extensions/xicall.py new file mode 100644 index 0000000..0a59dd7 --- /dev/null +++ b/bu4/indexing/extensions/xicall.py @@ -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_ + ) + ) + ) + ) + ) + ) diff --git a/bu4/indexing/extensions/xidlyd.py b/bu4/indexing/extensions/xidlyd.py new file mode 100644 index 0000000..967dd72 --- /dev/null +++ b/bu4/indexing/extensions/xidlyd.py @@ -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)) + ) + ) diff --git a/bu4/indexing/extensions/ximake.py b/bu4/indexing/extensions/ximake.py new file mode 100644 index 0000000..a38fccb --- /dev/null +++ b/bu4/indexing/extensions/ximake.py @@ -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)) + ) + ) diff --git a/bu4/indexing/extensions/xiname.py b/bu4/indexing/extensions/xiname.py new file mode 100644 index 0000000..e18ea55 --- /dev/null +++ b/bu4/indexing/extensions/xiname.py @@ -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())) diff --git a/bu4/indexing/extensions/xinull.py b/bu4/indexing/extensions/xinull.py new file mode 100644 index 0000000..3bdba28 --- /dev/null +++ b/bu4/indexing/extensions/xinull.py @@ -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()) diff --git a/bu4/indexing/extensions/xixcpt.py b/bu4/indexing/extensions/xixcpt.py new file mode 100644 index 0000000..f98f68f --- /dev/null +++ b/bu4/indexing/extensions/xixcpt.py @@ -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())) diff --git a/bu4/indexing/toolchain/parse_indexed.py b/bu4/indexing/toolchain/parse_indexed.py new file mode 100644 index 0000000..55af467 --- /dev/null +++ b/bu4/indexing/toolchain/parse_indexed.py @@ -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()) diff --git a/bu4/isynced.py b/bu4/isynced.py index 39c51cc..2db8fa9 100644 --- a/bu4/isynced.py +++ b/bu4/isynced.py @@ -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',) diff --git a/bu4/parsing/constructs/parsed.py b/bu4/linkable/constructs/parsed.py similarity index 100% rename from bu4/parsing/constructs/parsed.py rename to bu4/linkable/constructs/parsed.py diff --git a/bu4/parsing/constructs/pcall.py b/bu4/linkable/constructs/pcall.py similarity index 95% rename from bu4/parsing/constructs/pcall.py rename to bu4/linkable/constructs/pcall.py index 88efac7..870ae90 100644 --- a/bu4/parsing/constructs/pcall.py +++ b/bu4/linkable/constructs/pcall.py @@ -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 diff --git a/bu4/linkable/constructs/pdelayed.py b/bu4/linkable/constructs/pdelayed.py new file mode 100644 index 0000000..93a7c9c --- /dev/null +++ b/bu4/linkable/constructs/pdelayed.py @@ -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 + )) + ) + ) diff --git a/bu4/parsing/constructs/pexception.py b/bu4/linkable/constructs/pexception.py similarity index 91% rename from bu4/parsing/constructs/pexception.py rename to bu4/linkable/constructs/pexception.py index 8a995ea..14009ba 100644 --- a/bu4/parsing/constructs/pexception.py +++ b/bu4/linkable/constructs/pexception.py @@ -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 diff --git a/bu4/parsing/constructs/plambda.py b/bu4/linkable/constructs/plambda.py similarity index 95% rename from bu4/parsing/constructs/plambda.py rename to bu4/linkable/constructs/plambda.py index 145f8c8..4b7f54f 100644 --- a/bu4/parsing/constructs/plambda.py +++ b/bu4/linkable/constructs/plambda.py @@ -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 diff --git a/bu4/parsing/constructs/pname.py b/bu4/linkable/constructs/pname.py similarity index 92% rename from bu4/parsing/constructs/pname.py rename to bu4/linkable/constructs/pname.py index 33d86ee..2345447 100644 --- a/bu4/parsing/constructs/pname.py +++ b/bu4/linkable/constructs/pname.py @@ -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 diff --git a/bu4/parsing/constructs/pnull.py b/bu4/linkable/constructs/pnull.py similarity index 89% rename from bu4/parsing/constructs/pnull.py rename to bu4/linkable/constructs/pnull.py index 6baa257..4127c3d 100644 --- a/bu4/parsing/constructs/pnull.py +++ b/bu4/linkable/constructs/pnull.py @@ -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 diff --git a/bu4/linkable/extensions/xcall.py b/bu4/linkable/extensions/xcall.py new file mode 100644 index 0000000..0f9575a --- /dev/null +++ b/bu4/linkable/extensions/xcall.py @@ -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_ + ) + ) + ) + ) + ) + ) diff --git a/bu4/linkable/extensions/xdlyd.py b/bu4/linkable/extensions/xdlyd.py new file mode 100644 index 0000000..62d87b7 --- /dev/null +++ b/bu4/linkable/extensions/xdlyd.py @@ -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)) + ) + ) diff --git a/bu4/parsing/extensions/xmake.py b/bu4/linkable/extensions/xmake.py similarity index 88% rename from bu4/parsing/extensions/xmake.py rename to bu4/linkable/extensions/xmake.py index 40f186e..a342bea 100644 --- a/bu4/parsing/extensions/xmake.py +++ b/bu4/linkable/extensions/xmake.py @@ -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 diff --git a/bu4/parsing/extensions/xname.py b/bu4/linkable/extensions/xname.py similarity index 82% rename from bu4/parsing/extensions/xname.py rename to bu4/linkable/extensions/xname.py index 487cda8..dbcf99e 100644 --- a/bu4/parsing/extensions/xname.py +++ b/bu4/linkable/extensions/xname.py @@ -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 diff --git a/bu4/parsing/extensions/xnull.py b/bu4/linkable/extensions/xnull.py similarity index 81% rename from bu4/parsing/extensions/xnull.py rename to bu4/linkable/extensions/xnull.py index 8927a4a..384bed1 100644 --- a/bu4/parsing/extensions/xnull.py +++ b/bu4/linkable/extensions/xnull.py @@ -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 diff --git a/bu4/parsing/extensions/xqopn.py b/bu4/linkable/extensions/xqopn.py similarity index 92% rename from bu4/parsing/extensions/xqopn.py rename to bu4/linkable/extensions/xqopn.py index ee79a95..7a64cbb 100644 --- a/bu4/parsing/extensions/xqopn.py +++ b/bu4/linkable/extensions/xqopn.py @@ -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 diff --git a/bu4/parsing/extensions/xquot.py b/bu4/linkable/extensions/xquot.py similarity index 92% rename from bu4/parsing/extensions/xquot.py rename to bu4/linkable/extensions/xquot.py index 94ece5d..d67321f 100644 --- a/bu4/parsing/extensions/xquot.py +++ b/bu4/linkable/extensions/xquot.py @@ -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 diff --git a/bu4/parsing/extensions/xskip.py b/bu4/linkable/extensions/xskip.py similarity index 89% rename from bu4/parsing/extensions/xskip.py rename to bu4/linkable/extensions/xskip.py index 4170938..02f8e1d 100644 --- a/bu4/parsing/extensions/xskip.py +++ b/bu4/linkable/extensions/xskip.py @@ -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 diff --git a/bu4/parsing/extensions/xxcpt.py b/bu4/linkable/extensions/xxcpt.py similarity index 81% rename from bu4/parsing/extensions/xxcpt.py rename to bu4/linkable/extensions/xxcpt.py index 51af6c0..f771464 100644 --- a/bu4/parsing/extensions/xxcpt.py +++ b/bu4/linkable/extensions/xxcpt.py @@ -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 diff --git a/bu4/parsing/toolchain/parse.py b/bu4/linkable/toolchain/parse.py similarity index 72% rename from bu4/parsing/toolchain/parse.py rename to bu4/linkable/toolchain/parse.py index a921e41..5bb6913 100644 --- a/bu4/parsing/toolchain/parse.py +++ b/bu4/linkable/toolchain/parse.py @@ -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()) diff --git a/bu4/parsing/toolchain/readfile.py b/bu4/linkable/toolchain/readfile.py similarity index 100% rename from bu4/parsing/toolchain/readfile.py rename to bu4/linkable/toolchain/readfile.py diff --git a/bu4/linkable/toolchain/stdext.py b/bu4/linkable/toolchain/stdext.py new file mode 100644 index 0000000..9b35a65 --- /dev/null +++ b/bu4/linkable/toolchain/stdext.py @@ -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, +) diff --git a/bu4/parsing/toolchain/transply.py b/bu4/linkable/toolchain/transply.py similarity index 95% rename from bu4/parsing/toolchain/transply.py rename to bu4/linkable/toolchain/transply.py index d746d71..827c787 100644 --- a/bu4/parsing/toolchain/transply.py +++ b/bu4/linkable/toolchain/transply.py @@ -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() diff --git a/bu4/linking/constructs/ldelayed.py b/bu4/linking/constructs/ldelayed.py new file mode 100644 index 0000000..d4f3ab0 --- /dev/null +++ b/bu4/linking/constructs/ldelayed.py @@ -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}' diff --git a/bu4/linking/evaluable_from_parsed.py b/bu4/linking/evaluable_from_parsed.py index e5cf6ff..49b7421 100644 --- a/bu4/linking/evaluable_from_parsed.py +++ b/bu4/linking/evaluable_from_parsed.py @@ -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',) diff --git a/bu4/parsing/extensions/xcall.py b/bu4/parsing/extensions/xcall.py deleted file mode 100644 index 9b20323..0000000 --- a/bu4/parsing/extensions/xcall.py +++ /dev/null @@ -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) diff --git a/bu4/parsing/parser.py b/bu4/parsing/parser.py index 2fb24f6..54b23bf 100644 --- a/bu4/parsing/parser.py +++ b/bu4/parsing/parser.py @@ -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) diff --git a/bu4/parsing/states/parsing_call.py b/bu4/parsing/states/parsing_call.py deleted file mode 100644 index 0cf3e3a..0000000 --- a/bu4/parsing/states/parsing_call.py +++ /dev/null @@ -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_ - ) - ) - ) - ) - ) - ) diff --git a/bu4/parsing/toolchain/stdext.py b/bu4/parsing/toolchain/stdext.py deleted file mode 100644 index 64b3c3f..0000000 --- a/bu4/parsing/toolchain/stdext.py +++ /dev/null @@ -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, -) diff --git a/bu4/synced.py b/bu4/synced.py index b402005..ff26d99 100644 --- a/bu4/synced.py +++ b/bu4/synced.py @@ -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',) diff --git a/main.py b/main.py index 1141d6a..b242a8b 100644 --- a/main.py +++ b/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) diff --git a/src/sys6.bu4 b/src/sys6.bu4 index 1f33a7e..37d64ec 100644 --- a/src/sys6.bu4 +++ b/src/sys6.bu4 @@ -1,6 +1,11 @@ @@ + +"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +& + / + [ID] + [YC] """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -### /(g) (x) / @@ -8,11 +13,6 @@ [g] [YC] """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -(_) - / - [ID] - [YC] -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" (_) / < (x) /[x][SC] > [SC] """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""