deep_trace + refactor
This commit is contained in:
parent
de5a8ed899
commit
609371048d
@ -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())
|
||||
|
@ -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())
|
||||
|
@ -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())
|
||||
|
16
bu4/encoding/codes.py
Normal file
16
bu4/encoding/codes.py
Normal file
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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(
|
@ -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)
|
@ -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(
|
@ -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()))
|
@ -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())
|
@ -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')
|
@ -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')
|
@ -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)
|
@ -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()))
|
@ -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,
|
||||
)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
from io import BytesIO
|
||||
|
||||
from bu4.parsing.codes import *
|
||||
from bu4.encoding.codes import *
|
||||
|
||||
__all__ = ('transply',)
|
||||
|
||||
|
@ -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
|
30
bu4/tracing/deep_trace.py
Normal file
30
bu4/tracing/deep_trace.py
Normal file
@ -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
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
43
main.py
43
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'):
|
||||
|
Loading…
Reference in New Issue
Block a user