diff --git a/bu4/combinatory/lic.py b/bu4/combinatory/lic.py index 4f1114e..e53b36a 100644 --- a/bu4/combinatory/lic.py +++ b/bu4/combinatory/lic.py @@ -1,17 +1,18 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.combinatory.lcombinatory import LCombinatory +from bu4.encoding.codes import CODE_CMBI from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype from bu4.linkable.evaluation.elvtype import elvtype -from bu4.parsing.codes import CODE_CMBI +from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('EIC', 'IIC', 'XII', 'LIC',) +__all__ = ('EIC', 'IIC', 'XII', 'LIC', 'XLI',) class EIC(EValue): @@ -51,3 +52,8 @@ class LIC(LCombinatory): def __str__(self): return f'I' + + +class XLI(CodeExtension[Linked], code=CODE_CMBI): + def apply(self) -> TransformState[Linked]: + return TransformFinished(LIC()) diff --git a/bu4/combinatory/lkc.py b/bu4/combinatory/lkc.py index 5bd8508..8015ad0 100644 --- a/bu4/combinatory/lkc.py +++ b/bu4/combinatory/lkc.py @@ -1,18 +1,19 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.combinatory.lcombinatory import LCombinatory +from bu4.encoding.codes import CODE_CMBK from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype from bu4.linkable.evaluation.elvtype import elvtype -from bu4.parsing.codes import CODE_CMBK +from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('EKC', 'IKC', 'XIK', 'LKC',) +__all__ = ('EKC', 'IKC', 'XIK', 'LKC', 'XLK',) class EKC(EValue): @@ -52,3 +53,8 @@ class LKC(LCombinatory): def __str__(self): return f'K' + + +class XLK(CodeExtension[Linked], code=CODE_CMBK): + def apply(self) -> TransformState[Linked]: + return TransformFinished(LKC()) diff --git a/bu4/combinatory/lsc.py b/bu4/combinatory/lsc.py index efc0998..610d248 100644 --- a/bu4/combinatory/lsc.py +++ b/bu4/combinatory/lsc.py @@ -1,6 +1,7 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.combinatory.lcombinatory import LCombinatory +from bu4.encoding.codes import CODE_CMBS from bu4.evaluation.av.aftervalue import AfterValue from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue @@ -9,12 +10,12 @@ from bu4.evaluation.targets.avcall import AVCall from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype from bu4.linkable.evaluation.elvtype import elvtype -from bu4.parsing.codes import CODE_CMBS +from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('ESC', 'ESC1', 'ESC2', 'ISC', 'XIS', 'LSC',) +__all__ = ('ESC', 'ESC1', 'ESC2', 'ISC', 'XIS', 'LSC', 'XLS',) class ESC2(EValue): @@ -86,3 +87,8 @@ class LSC(LCombinatory): def __str__(self): return f'S' + + +class XLS(CodeExtension[Linked], code=CODE_CMBS): + def apply(self) -> TransformState[Linked]: + return TransformFinished(LSC()) diff --git a/bu4/encoding/codes.py b/bu4/encoding/codes.py new file mode 100644 index 0000000..8bb8007 --- /dev/null +++ b/bu4/encoding/codes.py @@ -0,0 +1,16 @@ +# Copyright (c) PARRRATE T&V 2021. All rights reserved. + +CODE_NULL = 0x00 +CODE_CALL = 0x01 +CODE_MAKE = 0x02 +CODE_NAME = 0x03 +CODE_SKIP = 0x04 +CODE_QUOT = 0x05 +CODE_QOPN = 0x06 +CODE_QCLS = 0x07 +CODE_XCPT = 0x08 +CODE_DLYD = 0x09 + +CODE_CMBI = 0x49 +CODE_CMBK = 0x4b +CODE_CMBS = 0x53 diff --git a/bu4/indexing/constructs/icall.py b/bu4/indexing/constructs/icall.py index 94399eb..c831b37 100644 --- a/bu4/indexing/constructs/icall.py +++ b/bu4/indexing/constructs/icall.py @@ -1,12 +1,12 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_CALL from bu4.evaluation.av.aftervalue import AfterValue from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.targets.avcall import AVCall from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_CALL 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/indexing/constructs/idelayed.py b/bu4/indexing/constructs/idelayed.py index a407464..edc5a18 100644 --- a/bu4/indexing/constructs/idelayed.py +++ b/bu4/indexing/constructs/idelayed.py @@ -1,11 +1,11 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_DLYD from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_DLYD 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/indexing/constructs/iexception.py b/bu4/indexing/constructs/iexception.py index ad6283e..b547280 100644 --- a/bu4/indexing/constructs/iexception.py +++ b/bu4/indexing/constructs/iexception.py @@ -1,10 +1,10 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_XCPT from bu4.evaluation.constructs.eexception import EException from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_XCPT from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/constructs/ilambda.py b/bu4/indexing/constructs/ilambda.py index b0cf796..b3097b8 100644 --- a/bu4/indexing/constructs/ilambda.py +++ b/bu4/indexing/constructs/ilambda.py @@ -1,10 +1,10 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_MAKE from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eilambda import EILambda from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_MAKE 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/indexing/constructs/iname.py b/bu4/indexing/constructs/iname.py index f1b8672..b4e87b9 100644 --- a/bu4/indexing/constructs/iname.py +++ b/bu4/indexing/constructs/iname.py @@ -1,9 +1,9 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NAME from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_NAME from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/constructs/inull.py b/bu4/indexing/constructs/inull.py index c040ea3..ad48675 100644 --- a/bu4/indexing/constructs/inull.py +++ b/bu4/indexing/constructs/inull.py @@ -1,10 +1,10 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NULL from bu4.evaluation.constructs.enull import ENull from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype -from bu4.parsing.codes import CODE_NULL from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/xicall.py b/bu4/indexing/extensions/xicall.py index 0b13219..876042e 100644 --- a/bu4/indexing/extensions/xicall.py +++ b/bu4/indexing/extensions/xicall.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_CALL 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.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/xidlyd.py b/bu4/indexing/extensions/xidlyd.py index ea01517..695fd46 100644 --- a/bu4/indexing/extensions/xidlyd.py +++ b/bu4/indexing/extensions/xidlyd.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_DLYD 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.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/ximake.py b/bu4/indexing/extensions/ximake.py index 3e22318..a7f5708 100644 --- a/bu4/indexing/extensions/ximake.py +++ b/bu4/indexing/extensions/ximake.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_MAKE 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.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/xiname.py b/bu4/indexing/extensions/xiname.py index 8700c1a..bb2b88d 100644 --- a/bu4/indexing/extensions/xiname.py +++ b/bu4/indexing/extensions/xiname.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NAME 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.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/xinull.py b/bu4/indexing/extensions/xinull.py index 246ab56..15eef52 100644 --- a/bu4/indexing/extensions/xinull.py +++ b/bu4/indexing/extensions/xinull.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NULL 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.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/indexing/extensions/xixcpt.py b/bu4/indexing/extensions/xixcpt.py index 5142b7a..4d49c48 100644 --- a/bu4/indexing/extensions/xixcpt.py +++ b/bu4/indexing/extensions/xixcpt.py @@ -1,8 +1,8 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_XCPT 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.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState diff --git a/bu4/isynced.py b/bu4/isynced.py index 6ad8ead..89550f3 100644 --- a/bu4/isynced.py +++ b/bu4/isynced.py @@ -1,5 +1,6 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.combinatory.tocombinatory import to_combinatory from bu4.evaluation.constructs.evalue import EValue from bu4.evaluation.sync import sync from bu4.linkable.toolchain.parse import parse @@ -10,10 +11,12 @@ from bu4.transform.transform import transform __all__ = ('isynced',) -def isynced(source: str) -> EValue: +def isynced(source: str, *, combinatory=False) -> EValue: bsource = transply(source) parsed = parse(bsource, standard_extensions) linked = transform(parsed.link(set())) + if combinatory: + linked = transform(to_combinatory(linked)) indexed = transform(linked.index([])) evaluable = indexed.attach([]) return sync(evaluable) diff --git a/bu4/linkable/extensions/xcall.py b/bu4/linkable/extensions/xlcall.py similarity index 82% rename from bu4/linkable/extensions/xcall.py rename to bu4/linkable/extensions/xlcall.py index e910018..e306852 100644 --- a/bu4/linkable/extensions/xcall.py +++ b/bu4/linkable/extensions/xlcall.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_CALL 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.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState -__all__ = ('XCall',) +__all__ = ('XLCall',) -class XCall(CodeExtension[Parsed], code=CODE_CALL): +class XLCall(CodeExtension[Parsed], code=CODE_CALL): def apply(self) -> TransformState[Parsed]: return self.readlambda( lambda argument: self.readlambdafinished( diff --git a/bu4/linkable/extensions/xdlyd.py b/bu4/linkable/extensions/xldlyd.py similarity index 78% rename from bu4/linkable/extensions/xdlyd.py rename to bu4/linkable/extensions/xldlyd.py index f303801..745048f 100644 --- a/bu4/linkable/extensions/xdlyd.py +++ b/bu4/linkable/extensions/xldlyd.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_DLYD 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.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState -__all__ = ('XDlyd',) +__all__ = ('XLDlyd',) -class XDlyd(CodeExtension[Parsed], code=CODE_DLYD): +class XLDlyd(CodeExtension[Parsed], code=CODE_DLYD): def apply(self) -> TransformState[Parsed]: return self.readlambdafinished( lambda value: PDelayed(value) diff --git a/bu4/linkable/extensions/xmake.py b/bu4/linkable/extensions/xlmake.py similarity index 80% rename from bu4/linkable/extensions/xmake.py rename to bu4/linkable/extensions/xlmake.py index fa3db52..4656a4f 100644 --- a/bu4/linkable/extensions/xmake.py +++ b/bu4/linkable/extensions/xlmake.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_MAKE from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.plambda import PLambda -from bu4.parsing.codes import CODE_MAKE from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState -__all__ = ('XMake',) +__all__ = ('XLMake',) -class XMake(CodeExtension[Parsed], code=CODE_MAKE): +class XLMake(CodeExtension[Parsed], code=CODE_MAKE): def apply(self) -> TransformState[Parsed]: name = self.parser.parse_name() return self.readlambdafinished( diff --git a/bu4/linkable/extensions/xname.py b/bu4/linkable/extensions/xlname.py similarity index 80% rename from bu4/linkable/extensions/xname.py rename to bu4/linkable/extensions/xlname.py index 83650c9..1ddf984 100644 --- a/bu4/linkable/extensions/xname.py +++ b/bu4/linkable/extensions/xlname.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NAME from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.pname import PName -from bu4.parsing.codes import CODE_NAME from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('XName',) +__all__ = ('XLName',) -class XName(CodeExtension[Parsed], code=CODE_NAME): +class XLName(CodeExtension[Parsed], code=CODE_NAME): def apply(self) -> TransformState[Parsed]: return TransformFinished(PName(self.parser.parse_name())) diff --git a/bu4/linkable/extensions/xnull.py b/bu4/linkable/extensions/xlnull.py similarity index 79% rename from bu4/linkable/extensions/xnull.py rename to bu4/linkable/extensions/xlnull.py index fbd177f..f33dfb2 100644 --- a/bu4/linkable/extensions/xnull.py +++ b/bu4/linkable/extensions/xlnull.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_NULL from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.pnull import PNull -from bu4.parsing.codes import CODE_NULL from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('XNull',) +__all__ = ('XLNull',) -class XNull(CodeExtension[Parsed], code=CODE_NULL): +class XLNull(CodeExtension[Parsed], code=CODE_NULL): def apply(self) -> TransformState[Parsed]: return TransformFinished(PNull()) diff --git a/bu4/linkable/extensions/xqopn.py b/bu4/linkable/extensions/xlqopn.py similarity index 72% rename from bu4/linkable/extensions/xqopn.py rename to bu4/linkable/extensions/xlqopn.py index 9e8b414..c31fefc 100644 --- a/bu4/linkable/extensions/xqopn.py +++ b/bu4/linkable/extensions/xlqopn.py @@ -1,13 +1,13 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_QOPN, CODE_QCLS from bu4.linkable.constructs.parsed import Parsed -from bu4.parsing.codes import CODE_QOPN, CODE_QCLS from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState -__all__ = ('XQopn',) +__all__ = ('XLQopn',) -class XQopn(CodeExtension[Parsed], code=CODE_QOPN): +class XLQopn(CodeExtension[Parsed], code=CODE_QOPN): def apply(self) -> TransformState[Parsed]: return self.endswith(CODE_QCLS, 'quot expected') diff --git a/bu4/linkable/extensions/xquot.py b/bu4/linkable/extensions/xlquot.py similarity index 74% rename from bu4/linkable/extensions/xquot.py rename to bu4/linkable/extensions/xlquot.py index 1d2c189..3ed96b7 100644 --- a/bu4/linkable/extensions/xquot.py +++ b/bu4/linkable/extensions/xlquot.py @@ -1,13 +1,13 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_QUOT from bu4.linkable.constructs.parsed import Parsed -from bu4.parsing.codes import CODE_QUOT from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformstate import TransformState -__all__ = ('XQuot',) +__all__ = ('XLQuot',) -class XQuot(CodeExtension[Parsed], code=CODE_QUOT): +class XLQuot(CodeExtension[Parsed], code=CODE_QUOT): def apply(self) -> TransformState[Parsed]: return self.endswith(CODE_QUOT, 'quot expected') diff --git a/bu4/linkable/extensions/xskip.py b/bu4/linkable/extensions/xlskip.py similarity index 76% rename from bu4/linkable/extensions/xskip.py rename to bu4/linkable/extensions/xlskip.py index e3e8b04..922fec2 100644 --- a/bu4/linkable/extensions/xskip.py +++ b/bu4/linkable/extensions/xlskip.py @@ -1,14 +1,14 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_SKIP from bu4.linkable.constructs.parsed import Parsed -from bu4.parsing.codes import CODE_SKIP from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.parsing.states.parsingread import ParsingRead from bu4.transform.states.transformstate import TransformState -__all__ = ('XSkip',) +__all__ = ('XLSkip',) -class XSkip(CodeExtension[Parsed], code=CODE_SKIP): +class XLSkip(CodeExtension[Parsed], code=CODE_SKIP): def apply(self) -> TransformState[Parsed]: return ParsingRead(self.parser) diff --git a/bu4/linkable/extensions/xxcpt.py b/bu4/linkable/extensions/xlxcpt.py similarity index 80% rename from bu4/linkable/extensions/xxcpt.py rename to bu4/linkable/extensions/xlxcpt.py index 18808ad..0b0deaf 100644 --- a/bu4/linkable/extensions/xxcpt.py +++ b/bu4/linkable/extensions/xlxcpt.py @@ -1,15 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. +from bu4.encoding.codes import CODE_XCPT from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.pexception import PException -from bu4.parsing.codes import CODE_XCPT from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState -__all__ = ('XXcpt',) +__all__ = ('XLXcpt',) -class XXcpt(CodeExtension[Parsed], code=CODE_XCPT): +class XLXcpt(CodeExtension[Parsed], code=CODE_XCPT): def apply(self) -> TransformState[Parsed]: return TransformFinished(PException(self.parser.parse_name())) diff --git a/bu4/linkable/toolchain/stdext.py b/bu4/linkable/toolchain/stdext.py index acaeaed..c1c3be2 100644 --- a/bu4/linkable/toolchain/stdext.py +++ b/bu4/linkable/toolchain/stdext.py @@ -1,25 +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 +from bu4.linkable.extensions.xlcall import XLCall +from bu4.linkable.extensions.xldlyd import XLDlyd +from bu4.linkable.extensions.xlmake import XLMake +from bu4.linkable.extensions.xlname import XLName +from bu4.linkable.extensions.xlnull import XLNull +from bu4.linkable.extensions.xlqopn import XLQopn +from bu4.linkable.extensions.xlquot import XLQuot +from bu4.linkable.extensions.xlskip import XLSkip +from bu4.linkable.extensions.xlxcpt import XLXcpt __all__ = ('standard_extensions',) standard_extensions = ( - XNull, - XCall, - XMake, - XName, - XSkip, - XQuot, - XQopn, - XXcpt, - XDlyd, + XLNull, + XLCall, + XLMake, + XLName, + XLSkip, + XLQuot, + XLQopn, + XLXcpt, + XLDlyd, ) diff --git a/bu4/linkable/toolchain/transply.py b/bu4/linkable/toolchain/transply.py index 827c787..77f0136 100644 --- a/bu4/linkable/toolchain/transply.py +++ b/bu4/linkable/toolchain/transply.py @@ -2,7 +2,7 @@ from io import BytesIO -from bu4.parsing.codes import * +from bu4.encoding.codes import * __all__ = ('transply',) diff --git a/bu4/parsing/codes.py b/bu4/parsing/codes.py deleted file mode 100644 index 17f04f6..0000000 --- a/bu4/parsing/codes.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) PARRRATE T&V 2021. All rights reserved. - -CODE_NULL = 0 -CODE_CALL = 1 -CODE_MAKE = 2 -CODE_NAME = 3 -CODE_SKIP = 4 -CODE_QUOT = 5 -CODE_QOPN = 6 -CODE_QCLS = 7 -CODE_XCPT = 8 -CODE_DLYD = 9 -CODE_CMBI = 10 -CODE_CMBK = 11 -CODE_CMBS = 12 diff --git a/bu4/tracing/deep_trace.py b/bu4/tracing/deep_trace.py new file mode 100644 index 0000000..5ae7f56 --- /dev/null +++ b/bu4/tracing/deep_trace.py @@ -0,0 +1,30 @@ +# Copyright (c) PARRRATE T&V 2021. All rights reserved. + +from collections import deque + +from bu4.tracing.probe import Probe +from bu4.tracing.trace import trace + +__all__ = ('deep_trace',) + + +def deep_trace(sysx, *, length=1000, depth=10000): + hist = [] + queue = deque([(0, 0, sysx)]) + for trace_index in range(1, length + 1): + hist.append(trace_index) + if not queue: + break + tab, parent, evaluable = queue.popleft() + hist.append(parent) + for _ in range(depth): + evaluable = evaluable.next() + _probe_index, probe = trace(evaluable) + hist.append(_probe_index) + if isinstance(probe, Probe): + start, list_ = probe.start_and_list() + hist.append(start) + queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_) + else: + hist.append(None) + return hist diff --git a/bu4/tracing/probe.py b/bu4/tracing/probe.py index 7b1231a..14bd525 100644 --- a/bu4/tracing/probe.py +++ b/bu4/tracing/probe.py @@ -3,10 +3,13 @@ from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue -__all__ = ('Probe', 'ProbeA',) +__all__ = ('Probe',) class Probe(EValue): + def __new__(cls, *args, **kwargs): + return object.__new__(ProbeA if cls == Probe else cls) + def call(self, argument: Evaluable) -> Evaluable: return ProbeB(self, argument) diff --git a/bu4/tracing/trace.py b/bu4/tracing/trace.py index cd48eeb..e973fdb 100644 --- a/bu4/tracing/trace.py +++ b/bu4/tracing/trace.py @@ -8,7 +8,7 @@ from bu4.evaluation.constructs.evalue import EValue from bu4.evaluation.sync import sync from bu4.indexing.evaluation.eilambda import EILambda from bu4.linkable.evaluation.ellambda import ELLambda -from bu4.tracing.probe import ProbeA +from bu4.tracing.probe import Probe __all__ = ('trace', 'probe_index_reset',) @@ -21,7 +21,7 @@ def trace(lambda_: EValue): while True: if not isinstance(lambda_, (ELLambda, EILambda, EIC, EKC, ESC, ESC1, ESC2, EDelayed)): return size, lambda_ - lambda_ = sync(lambda_.call(ProbeA(_probe_index))) + lambda_ = sync(lambda_.call(Probe(_probe_index))) _probe_index += 1 size += 1 diff --git a/main.py b/main.py index 804d2d2..a2db548 100644 --- a/main.py +++ b/main.py @@ -1,56 +1,15 @@ # Copyright (c) PARRRATE T&V 2021. All rights reserved. import random -from collections import deque 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.linkable.toolchain.parse import parse from bu4.linkable.toolchain.readfile import readfile -from bu4.linkable.toolchain.stdext import standard_extensions -from bu4.linkable.toolchain.transply import transply -from bu4.combinatory.tocombinatory import to_combinatory -from bu4.tracing.probe import Probe -from bu4.tracing.trace import trace -from bu4.transform.transform import transform +from bu4.tracing.deep_trace import deep_trace from timesample import TimeSample - -def deep_trace(sysx): - hist = [] - queue = deque([(0, 0, sysx)]) - for trace_index in range(1, 1000 + 1): - hist.append(trace_index) - if not queue: - break - tab, parent, evaluable = queue.popleft() - hist.append(parent) - for _ in range(10000): - evaluable = evaluable.next() - _probe_index, probe = trace(evaluable) - hist.append(_probe_index) - # prefix = ('.', ' ' * tab, parent, trace_index) - if isinstance(probe, Probe): - start, list_ = probe.start_and_list() - hist.append(start) - for i in range(len(list_)): - for _ in range(10000): - list_[i] = list_[i].next() - # TimeSample.print(*prefix, _probe_index, 'probe', start, f'[ {" ; ".join(map(str, list_))} ]') - queue.extend((tab + 1, trace_index, deeper_evaluable) for deeper_evaluable in list_) - else: - hist.append(None) - # TimeSample.print(*prefix, '...') - return hist - - -print(transform(to_combinatory(transform(parse(transply( - '/[b]/[a](x)(y)/[x][y]' -), standard_extensions).link({b'a', b'b'}))))) - - with TimeSample('all'): with TimeSample('sys0'): with TimeSample('compilation'):