parse_indexed
This commit is contained in:
parent
2b3a202a52
commit
d51d6a38e5
@ -26,4 +26,4 @@ class ILambda(Indexed):
|
|||||||
return f'(){self.value}'
|
return f'(){self.value}'
|
||||||
|
|
||||||
def __bytes__(self):
|
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.constructs.evalue import EValue
|
||||||
from bu4.evaluation.sync import sync
|
from bu4.evaluation.sync import sync
|
||||||
from bu4.parsing.toolchain.parse import parse
|
from bu4.linkable.toolchain.parse import parse
|
||||||
from bu4.parsing.toolchain.stdext import standard_extension
|
from bu4.linkable.toolchain.stdext import standard_extension
|
||||||
from bu4.parsing.toolchain.transply import transply
|
from bu4.linkable.toolchain.transply import transply
|
||||||
from bu4.transform.transform import transform
|
from bu4.transform.transform import transform
|
||||||
|
|
||||||
__all__ = ('isynced',)
|
__all__ = ('isynced',)
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from bu4.linking.constructs.lcall import LCall
|
from bu4.linking.constructs.lcall import LCall
|
||||||
from bu4.linking.constructs.linked import Linked
|
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.aftertransform import AfterTransform
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
from bu4.transform.states.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstart import TransformStart
|
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.lexception import LException
|
||||||
from bu4.linking.constructs.linked import Linked
|
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.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from bu4.linking.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
from bu4.linking.constructs.llambda import LLambda
|
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.aftertransform import AfterTransform
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
from bu4.transform.states.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstart import TransformStart
|
from bu4.transform.states.transformstart import TransformStart
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from bu4.linking.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
from bu4.linking.constructs.lname import LName
|
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.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
||||||
|
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
from bu4.linking.constructs.linked import Linked
|
from bu4.linking.constructs.linked import Linked
|
||||||
from bu4.linking.constructs.lnull import LNull
|
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.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
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.
|
# 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.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.extensions.extension import Extension
|
||||||
from bu4.parsing.states.parsingread import ParsingRead
|
from bu4.parsing.states.parsingread import ParsingRead
|
||||||
from bu4.transform.states.aftertransform import AfterTransform
|
from bu4.transform.states.aftertransform import AfterTransform
|
@ -1,8 +1,8 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.codes import CODE_NAME
|
from bu4.parsing.codes import CODE_NAME
|
||||||
from bu4.parsing.constructs.parsed import Parsed
|
from bu4.linkable.constructs.parsed import Parsed
|
||||||
from bu4.parsing.constructs.pname import PName
|
from bu4.linkable.constructs.pname import PName
|
||||||
from bu4.parsing.extensions.extension import Extension
|
from bu4.parsing.extensions.extension import Extension
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
from bu4.transform.states.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
@ -1,8 +1,8 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# 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.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.parsing.extensions.extension import Extension
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
from bu4.transform.states.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.codes import CODE_QOPN, CODE_QCLS
|
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.extensions.extension import Extension
|
||||||
from bu4.parsing.states.parsingread import ParsingRead
|
from bu4.parsing.states.parsingread import ParsingRead
|
||||||
from bu4.parsing.targets.apendswith import APEndsWith
|
from bu4.parsing.targets.apendswith import APEndsWith
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.codes import CODE_QUOT
|
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.extensions.extension import Extension
|
||||||
from bu4.parsing.states.parsingread import ParsingRead
|
from bu4.parsing.states.parsingread import ParsingRead
|
||||||
from bu4.parsing.targets.apendswith import APEndsWith
|
from bu4.parsing.targets.apendswith import APEndsWith
|
@ -1,7 +1,7 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.codes import CODE_SKIP
|
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.extensions.extension import Extension
|
||||||
from bu4.parsing.states.parsingread import ParsingRead
|
from bu4.parsing.states.parsingread import ParsingRead
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
@ -1,8 +1,8 @@
|
|||||||
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
|
||||||
|
|
||||||
from bu4.parsing.codes import CODE_XCPT
|
from bu4.parsing.codes import CODE_XCPT
|
||||||
from bu4.parsing.constructs.parsed import Parsed
|
from bu4.linkable.constructs.parsed import Parsed
|
||||||
from bu4.parsing.constructs.pexception import PException
|
from bu4.linkable.constructs.pexception import PException
|
||||||
from bu4.parsing.extensions.extension import Extension
|
from bu4.parsing.extensions.extension import Extension
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
from bu4.transform.states.transformfinished import TransformFinished
|
||||||
from bu4.transform.states.transformstate import TransformState
|
from bu4.transform.states.transformstate import TransformState
|
@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
from typing import Iterable, Type
|
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.extensions.extension import Extension
|
||||||
from bu4.parsing.parser import Parser
|
from bu4.parsing.parser import Parser
|
||||||
|
from bu4.transform.transform import transform
|
||||||
|
|
||||||
__all__ = ('parse',)
|
__all__ = ('parse',)
|
||||||
|
|
||||||
@ -14,4 +15,4 @@ def parse(source: bytes, extensions: Iterable[Type[Extension[Parsed]]]) -> Parse
|
|||||||
source,
|
source,
|
||||||
extensions
|
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]))
|
transplied.write(bytes([CODE_QCLS]))
|
||||||
elif c in '«':
|
elif c in '«':
|
||||||
transplied.write(bytes([CODE_QOPN, CODE_XCPT]))
|
transplied.write(bytes([CODE_QOPN, CODE_XCPT]))
|
||||||
|
elif c in '&':
|
||||||
|
transplied.write(bytes([CODE_DLYD]))
|
||||||
else:
|
else:
|
||||||
transplied.write(c.encode())
|
transplied.write(c.encode())
|
||||||
return transplied.getvalue()
|
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.av.envtype import envtype
|
||||||
from bu4.evaluation.constructs.eattachable import EAttachable
|
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
|
from bu4.transform.transform import transform
|
||||||
|
|
||||||
__all__ = ('evaluable_from_parsed',)
|
__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.abstractextension import AbstractExtension
|
||||||
from bu4.parsing.extensions.extension import Extension
|
from bu4.parsing.extensions.extension import Extension
|
||||||
from bu4.parsing.states.parsingread import ParsingRead
|
from bu4.parsing.states.parsingread import ParsingRead
|
||||||
from bu4.transform.states.transformfinished import TransformFinished
|
|
||||||
|
|
||||||
__all__ = ('Parser',)
|
__all__ = ('Parser',)
|
||||||
|
|
||||||
|
from bu4.transform.states.transformstate import TransformState
|
||||||
|
|
||||||
|
from bu4.transform.transform import transform
|
||||||
|
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
|
|
||||||
|
|
||||||
@ -41,9 +44,5 @@ class Parser(AbstractParser[T]):
|
|||||||
raise ValueError(f'unknown control: {hex(code)}')
|
raise ValueError(f'unknown control: {hex(code)}')
|
||||||
return extension
|
return extension
|
||||||
|
|
||||||
def parse(self) -> T:
|
def parse(self) -> TransformState[T]:
|
||||||
state = ParsingRead(self)
|
return ParsingRead(self)
|
||||||
while True:
|
|
||||||
if isinstance(state, TransformFinished):
|
|
||||||
return state.transformed
|
|
||||||
state = state.next()
|
|
||||||
|
@ -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.constructs.evalue import EValue
|
||||||
from bu4.evaluation.sync import sync
|
from bu4.evaluation.sync import sync
|
||||||
from bu4.linking.evaluable_from_parsed import evaluable_from_parsed
|
from bu4.linking.evaluable_from_parsed import evaluable_from_parsed
|
||||||
from bu4.parsing.toolchain.parse import parse
|
from bu4.linkable.toolchain.parse import parse
|
||||||
from bu4.parsing.toolchain.stdext import standard_extension
|
from bu4.linkable.toolchain.stdext import standard_extension
|
||||||
from bu4.parsing.toolchain.transply import transply
|
from bu4.linkable.toolchain.transply import transply
|
||||||
|
|
||||||
__all__ = ('synced',)
|
__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.constructs.proxy import antiproxy, eproxy
|
||||||
from bu4.evaluation.sync import sync
|
from bu4.evaluation.sync import sync
|
||||||
from bu4.isynced import isynced as synced
|
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.probe import Probe
|
||||||
from bu4.tracing.trace import trace
|
from bu4.tracing.trace import trace
|
||||||
from timesample import TimeSample
|
from timesample import TimeSample
|
||||||
@ -86,7 +86,6 @@ with TimeSample('all'):
|
|||||||
TimeSample.print(*prefix, '...')
|
TimeSample.print(*prefix, '...')
|
||||||
with TimeSample('sys6'):
|
with TimeSample('sys6'):
|
||||||
sys6 = synced(readfile('src/sys6')).call(synced('?'))
|
sys6 = synced(readfile('src/sys6')).call(synced('?'))
|
||||||
|
|
||||||
for _ in range(100):
|
for _ in range(100):
|
||||||
sys6 = sys6.next()
|
sys6 = sys6.next()
|
||||||
print(sys6)
|
print(sys6)
|
||||||
|
12
src/sys6.bu4
12
src/sys6.bu4
@ -1,6 +1,11 @@
|
|||||||
@@
|
@@
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
&
|
||||||
|
/
|
||||||
|
[ID]
|
||||||
|
[YC]
|
||||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
###
|
|
||||||
/(g)
|
/(g)
|
||||||
(x)
|
(x)
|
||||||
/
|
/
|
||||||
@ -8,11 +13,6 @@
|
|||||||
[g]
|
[g]
|
||||||
[YC]
|
[YC]
|
||||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
(_)
|
|
||||||
/
|
|
||||||
[ID]
|
|
||||||
[YC]
|
|
||||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
|
||||||
(_)
|
(_)
|
||||||
/ < (x) /[x][SC] > [SC]
|
/ < (x) /[x][SC] > [SC]
|
||||||
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
Loading…
Reference in New Issue
Block a user