CodeExtension

This commit is contained in:
AF 2021-09-09 08:16:01 +03:00
parent d51d6a38e5
commit b45301194c
34 changed files with 132 additions and 180 deletions

View File

@ -1,25 +1,29 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved. # Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.evaluation.av.envtype import envtype from typing import TypeVar, Generic
from bu4.evaluation.constructs.attachable import Attachable
from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.eattachable import EAttachable
from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue from bu4.evaluation.constructs.evalue import EValue
from bu4.linking.constructs.linked import Linked from bu4.evaluation.targets.avanonymouscontainer import AVAnonymousContainer
__all__ = ('EDelayed',) __all__ = ('EDelayed',)
T = TypeVar('T')
class EDelayed(EValue):
def __init__(self, env: envtype, value: Linked): class EDelayed(EValue, Generic[T]):
def __init__(self, env: T, value: Attachable[T]):
self.env = env self.env = env
self.value = value self.value = value
self.evaluable = EAttachable( self.evaluable = AVAnonymousContainer(EAttachable(
self.env, self.env,
self.value self.value
) )).after_value
def call(self, argument: Evaluable) -> Evaluable: def call(self, argument: Evaluable) -> Evaluable:
return self.evaluable return self.evaluable
def __str__(self): def __str__(self):
return f'(()){self.value}' return f'&{self.value}'

View File

@ -1,25 +0,0 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.evaluation.av.evtype import evtype
from bu4.evaluation.constructs.eattachable import EAttachable
from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue
from bu4.indexing.constructs.indexed import Indexed
__all__ = ('EIDelayed',)
class EIDelayed(EValue):
def __init__(self, ev: evtype, value: Indexed):
self.ev = ev
self.value = value
self.evaluable = EAttachable(
self.ev,
self.value
)
def call(self, argument: Evaluable) -> Evaluable:
return self.evaluable
def __str__(self):
return f'(()){self.value}'

View File

@ -2,25 +2,26 @@
from bu4.evaluation.av.evtype import evtype from bu4.evaluation.av.evtype import evtype
from bu4.evaluation.av.lambdaev import LambdaEv from bu4.evaluation.av.lambdaev import LambdaEv
from bu4.evaluation.constructs.attachable import Attachable
from bu4.evaluation.constructs.eattachable import EAttachable from bu4.evaluation.constructs.eattachable import EAttachable
from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.evaluation.constructs.evalue import EValue from bu4.evaluation.constructs.evalue import EValue
from bu4.indexing.constructs.indexed import Indexed
__all__ = ('EILambda',) __all__ = ('EILambda',)
class EILambda(EValue): class EILambda(EValue):
def __init__(self, ev: evtype, value: Indexed, *, memoize: bool): def __init__(self, ev: evtype, value: Attachable[evtype], *, memoize: bool):
self.ev = ev self.ev = ev
self.value = value self.value = value
self.memoize = memoize self.memoize = memoize
def call(self, argument: Evaluable) -> Evaluable: def call(self, argument: Evaluable) -> Evaluable:
ev: evtype = LambdaEv(self.ev, argument, memoize=self.memoize)
return EAttachable( return EAttachable(
LambdaEv(self.ev, argument, memoize=self.memoize), ev,
self.value self.value
) )
def __str__(self): def __str__(self):
return f'(){self.value}' return f'(0){self.value}'

View File

@ -1,8 +1,8 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
__all__ = ('Evaluable',) __all__ = ('Evaluable',)
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
class Evaluable: class Evaluable:
def next(self) -> 'Evaluable': def next(self) -> 'Evaluable':
raise NotImplementedError raise NotImplementedError

View File

@ -1,7 +1,7 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved. # Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.evaluation.av.evtype import evtype from bu4.evaluation.av.evtype import evtype
from bu4.evaluation.constructs.eidelayed import EIDelayed from bu4.evaluation.constructs.edelayed import EDelayed
from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evaluable import Evaluable
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_DLYD from bu4.parsing.codes import CODE_DLYD
@ -14,13 +14,13 @@ class IDelayed(Indexed):
self.value = value self.value = value
def attach(self, ev: evtype) -> Evaluable: def attach(self, ev: evtype) -> Evaluable:
return EIDelayed( return EDelayed(
ev, ev,
self.value self.value
) )
def __str__(self): def __str__(self):
return f'(){self.value}' return f'&{self.value}'
def __bytes__(self): def __bytes__(self):
return bytes([CODE_DLYD, *bytes(self.value)]) return bytes([CODE_DLYD, *bytes(self.value)])

View File

@ -23,7 +23,7 @@ class ILambda(Indexed):
) )
def __str__(self): def __str__(self):
return f'(){self.value}' return f'(0){self.value}'
def __bytes__(self): def __bytes__(self):
return bytes([CODE_MAKE, self.memoize, len(self.table), *self.table, *bytes(self.value)]) return bytes([CODE_MAKE, self.memoize, len(self.table), *self.table, *bytes(self.value)])

View File

@ -3,31 +3,19 @@
from bu4.indexing.constructs.icall import ICall from bu4.indexing.constructs.icall import ICall
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_CALL from bu4.parsing.codes import CODE_CALL
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XICall',) __all__ = ('XICall',)
class XICall(Extension[Indexed], code=CODE_CALL): class XICall(CodeExtension[Indexed], code=CODE_CALL):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
return AfterTransform( return self.readlambda(
ParsingRead(self.parser), lambda argument: self.readlambdafinished(
ATLambda( lambda lambda_: ICall(
lambda argument: AfterTransform(
ParsingRead(self.parser),
ATLambda(
lambda lambda_: TransformFinished(
ICall(
argument, argument,
lambda_ lambda_
) )
) )
) )
)
)
)

View File

@ -3,21 +3,14 @@
from bu4.indexing.constructs.idelayed import IDelayed from bu4.indexing.constructs.idelayed import IDelayed
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_DLYD from bu4.parsing.codes import CODE_DLYD
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XIDlyd',) __all__ = ('XIDlyd',)
class XIDlyd(Extension[Indexed], code=CODE_DLYD): class XIDlyd(CodeExtension[Indexed], code=CODE_DLYD):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
return AfterTransform( return self.readlambdafinished(
ParsingRead(self.parser), lambda value: IDelayed(value)
ATLambda(
lambda value: TransformFinished(IDelayed(value))
)
) )

View File

@ -3,23 +3,16 @@
from bu4.indexing.constructs.ilambda import ILambda from bu4.indexing.constructs.ilambda import ILambda
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_MAKE from bu4.parsing.codes import CODE_MAKE
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XIMake',) __all__ = ('XIMake',)
class XIMake(Extension[Indexed], code=CODE_MAKE): class XIMake(CodeExtension[Indexed], code=CODE_MAKE):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
memoize = bool(self.parser.read()) memoize = bool(self.parser.read())
table = [self.parser.read() for _ in range(self.parser.read())] table = [self.parser.read() for _ in range(self.parser.read())]
return AfterTransform( return self.readlambdafinished(
ParsingRead(self.parser), lambda value: ILambda(value, table, memoize=memoize)
ATLambda(
lambda value: TransformFinished(ILambda(value, table, memoize=memoize))
)
) )

View File

@ -3,13 +3,13 @@
from bu4.indexing.constructs.iname import IName from bu4.indexing.constructs.iname import IName
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_NAME from bu4.parsing.codes import CODE_NAME
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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
__all__ = ('XIName',) __all__ = ('XIName',)
class XIName(Extension[Indexed], code=CODE_NAME): class XIName(CodeExtension[Indexed], code=CODE_NAME):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
return TransformFinished(IName(self.parser.read())) return TransformFinished(IName(self.parser.read()))

View File

@ -3,13 +3,13 @@
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.indexing.constructs.inull import INull from bu4.indexing.constructs.inull import INull
from bu4.parsing.codes import CODE_NULL from bu4.parsing.codes import CODE_NULL
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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
__all__ = ('XINull',) __all__ = ('XINull',)
class XINull(Extension[Indexed], code=CODE_NULL): class XINull(CodeExtension[Indexed], code=CODE_NULL):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
return TransformFinished(INull()) return TransformFinished(INull())

View File

@ -3,13 +3,13 @@
from bu4.indexing.constructs.iexception import IException from bu4.indexing.constructs.iexception import IException
from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.constructs.indexed import Indexed
from bu4.parsing.codes import CODE_XCPT from bu4.parsing.codes import CODE_XCPT
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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
__all__ = ('XIXcpt',) __all__ = ('XIXcpt',)
class XIXcpt(Extension[Indexed], code=CODE_XCPT): class XIXcpt(CodeExtension[Indexed], code=CODE_XCPT):
def apply(self) -> TransformState[Indexed]: def apply(self) -> TransformState[Indexed]:
return TransformFinished(IException(self.parser.parse_name())) return TransformFinished(IException(self.parser.parse_name()))

View File

@ -3,7 +3,7 @@
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.linkable.toolchain.parse import parse from bu4.linkable.toolchain.parse import parse
from bu4.linkable.toolchain.stdext import standard_extension from bu4.linkable.toolchain.stdext import standard_extensions
from bu4.linkable.toolchain.transply import transply from bu4.linkable.toolchain.transply import transply
from bu4.transform.transform import transform from bu4.transform.transform import transform
@ -12,7 +12,7 @@ __all__ = ('isynced',)
def isynced(source: str) -> EValue: def isynced(source: str) -> EValue:
bsource = transply(source) bsource = transply(source)
parsed = parse(bsource, standard_extension) parsed = parse(bsource, standard_extensions)
linked = transform(parsed.link(set())) linked = transform(parsed.link(set()))
indexed = transform(linked.index([])) indexed = transform(linked.index([]))
evaluable = indexed.attach([]) evaluable = indexed.attach([])

View File

@ -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.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.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

View File

@ -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.linking.constructs.ldelayed import LDelayed from bu4.linking.constructs.ldelayed import LDelayed
from bu4.linking.constructs.linked import Linked 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.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

View File

@ -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.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.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

View File

@ -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.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.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

View File

@ -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.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.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

View File

@ -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.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.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

View File

@ -3,31 +3,19 @@
from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pcall import PCall from bu4.linkable.constructs.pcall import PCall
from bu4.parsing.codes import CODE_CALL from bu4.parsing.codes import CODE_CALL
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XCall',) __all__ = ('XCall',)
class XCall(Extension[Parsed], code=CODE_CALL): class XCall(CodeExtension[Parsed], code=CODE_CALL):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return AfterTransform( return self.readlambda(
ParsingRead(self.parser), lambda argument: self.readlambdafinished(
ATLambda( lambda lambda_: PCall(
lambda argument: AfterTransform(
ParsingRead(self.parser),
ATLambda(
lambda lambda_: TransformFinished(
PCall(
argument, argument,
lambda_ lambda_
) )
) )
) )
)
)
)

View File

@ -3,21 +3,14 @@
from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pdelayed import PDelayed from bu4.linkable.constructs.pdelayed import PDelayed
from bu4.parsing.codes import CODE_DLYD from bu4.parsing.codes import CODE_DLYD
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XDlyd',) __all__ = ('XDlyd',)
class XDlyd(Extension[Parsed], code=CODE_DLYD): class XDlyd(CodeExtension[Parsed], code=CODE_DLYD):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return AfterTransform( return self.readlambdafinished(
ParsingRead(self.parser), lambda value: PDelayed(value)
ATLambda(
lambda value: TransformFinished(PDelayed(value))
)
) )

View File

@ -3,22 +3,15 @@
from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.plambda import PLambda from bu4.linkable.constructs.plambda import PLambda
from bu4.parsing.codes import CODE_MAKE from bu4.parsing.codes import CODE_MAKE
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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.states.transformstate import TransformState
from bu4.transform.targets.atlambda import ATLambda
__all__ = ('XMake',) __all__ = ('XMake',)
class XMake(Extension[Parsed], code=CODE_MAKE): class XMake(CodeExtension[Parsed], code=CODE_MAKE):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
name = self.parser.parse_name() name = self.parser.parse_name()
return AfterTransform( return self.readlambdafinished(
ParsingRead(self.parser), lambda value: PLambda(name, value)
ATLambda(
lambda value: TransformFinished(PLambda(name, value))
)
) )

View File

@ -1,15 +1,15 @@
# 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.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pname import PName from bu4.linkable.constructs.pname import PName
from bu4.parsing.extensions.extension import Extension 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.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState from bu4.transform.states.transformstate import TransformState
__all__ = ('XName',) __all__ = ('XName',)
class XName(Extension[Parsed], code=CODE_NAME): class XName(CodeExtension[Parsed], code=CODE_NAME):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return TransformFinished(PName(self.parser.parse_name())) return TransformFinished(PName(self.parser.parse_name()))

View File

@ -3,13 +3,13 @@
from bu4.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pnull import PNull from bu4.linkable.constructs.pnull import PNull
from bu4.parsing.codes import CODE_NULL from bu4.parsing.codes import CODE_NULL
from bu4.parsing.extensions.extension import Extension from bu4.parsing.extensions.CodeExtension import CodeExtension
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
__all__ = ('XNull',) __all__ = ('XNull',)
class XNull(Extension[Parsed], code=CODE_NULL): class XNull(CodeExtension[Parsed], code=CODE_NULL):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return TransformFinished(PNull()) return TransformFinished(PNull())

View File

@ -1,16 +1,13 @@
# 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.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.extensions.extension import Extension from bu4.parsing.codes import CODE_QOPN, CODE_QCLS
from bu4.parsing.states.parsingread import ParsingRead from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.parsing.targets.apendswith import APEndsWith
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformstate import TransformState from bu4.transform.states.transformstate import TransformState
__all__ = ('XQopn',) __all__ = ('XQopn',)
class XQopn(Extension[Parsed], code=CODE_QOPN): class XQopn(CodeExtension[Parsed], code=CODE_QOPN):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return AfterTransform(ParsingRead(self.parser), APEndsWith(self.parser, CODE_QCLS, 'quot expected')) return self.endswith(CODE_QCLS, 'quot expected')

View File

@ -1,16 +1,13 @@
# 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.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.extensions.extension import Extension from bu4.parsing.codes import CODE_QUOT
from bu4.parsing.states.parsingread import ParsingRead from bu4.parsing.extensions.CodeExtension import CodeExtension
from bu4.parsing.targets.apendswith import APEndsWith
from bu4.transform.states.aftertransform import AfterTransform
from bu4.transform.states.transformstate import TransformState from bu4.transform.states.transformstate import TransformState
__all__ = ('XQuot',) __all__ = ('XQuot',)
class XQuot(Extension[Parsed], code=CODE_QUOT): class XQuot(CodeExtension[Parsed], code=CODE_QUOT):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return AfterTransform(ParsingRead(self.parser), APEndsWith(self.parser, CODE_QUOT, 'quot expected')) return self.endswith(CODE_QUOT, 'quot expected')

View File

@ -1,14 +1,14 @@
# 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.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.parsing.extensions.extension import Extension from bu4.parsing.codes import CODE_SKIP
from bu4.parsing.extensions.CodeExtension import CodeExtension
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
__all__ = ('XSkip',) __all__ = ('XSkip',)
class XSkip(Extension[Parsed], code=CODE_SKIP): class XSkip(CodeExtension[Parsed], code=CODE_SKIP):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return ParsingRead(self.parser) return ParsingRead(self.parser)

View File

@ -1,15 +1,15 @@
# 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.linkable.constructs.parsed import Parsed from bu4.linkable.constructs.parsed import Parsed
from bu4.linkable.constructs.pexception import PException from bu4.linkable.constructs.pexception import PException
from bu4.parsing.extensions.extension import Extension 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.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState from bu4.transform.states.transformstate import TransformState
__all__ = ('XXcpt',) __all__ = ('XXcpt',)
class XXcpt(Extension[Parsed], code=CODE_XCPT): class XXcpt(CodeExtension[Parsed], code=CODE_XCPT):
def apply(self) -> TransformState[Parsed]: def apply(self) -> TransformState[Parsed]:
return TransformFinished(PException(self.parser.parse_name())) return TransformFinished(PException(self.parser.parse_name()))

View File

@ -10,9 +10,9 @@ from bu4.linkable.extensions.xquot import XQuot
from bu4.linkable.extensions.xskip import XSkip from bu4.linkable.extensions.xskip import XSkip
from bu4.linkable.extensions.xxcpt import XXcpt from bu4.linkable.extensions.xxcpt import XXcpt
__all__ = ('standard_extension',) __all__ = ('standard_extensions',)
standard_extension = ( standard_extensions = (
XNull, XNull,
XCall, XCall,
XMake, XMake,

View File

@ -35,4 +35,4 @@ class LDelayed(Linked):
) )
def __str__(self): def __str__(self):
return f'(){self.value}' return f'&{self.value}'

View File

@ -0,0 +1,39 @@
# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from abc import ABC
from typing import TypeVar, Callable
from bu4.parsing.extensions.extension import Extension
from bu4.parsing.states.parsingread import ParsingRead
from bu4.parsing.targets.apendswith import APEndsWith
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__ = ('CodeExtension',)
T = TypeVar('T')
class CodeExtension(Extension[T], ABC):
def __init_subclass__(cls, /, code: int = None):
super().__init_subclass__()
if code is None:
raise TypeError
cls.code = code
def readlambda(self, lambda_: Callable[[T], TransformState[T]]) -> TransformState[T]:
return AfterTransform(
ParsingRead(self.parser),
ATLambda(lambda_)
)
def readlambdafinished(self, lambda_: Callable[[T], T]) -> TransformState[T]:
return AfterTransform(
ParsingRead(self.parser),
ATLambda(lambda parsed: TransformFinished(lambda_(parsed)))
)
def endswith(self, expected: int, message: str):
return AfterTransform(ParsingRead(self.parser), APEndsWith(self.parser, expected, message))

View File

@ -12,11 +12,5 @@ T = TypeVar('T')
class Extension(AbstractExtension[T], ABC): class Extension(AbstractExtension[T], ABC):
def __init_subclass__(cls, /, code: int = None, **kwargs): def __init__(self, parser: AbstractParser[T]):
super().__init_subclass__(**kwargs)
if code is None:
raise TypeError
cls.code = code
def __init__(self, parser: AbstractParser):
self.parser = parser self.parser = parser

View File

@ -7,12 +7,9 @@ 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
__all__ = ('Parser',)
from bu4.transform.states.transformstate import TransformState from bu4.transform.states.transformstate import TransformState
from bu4.transform.transform import transform __all__ = ('Parser',)
T = TypeVar('T') T = TypeVar('T')

View File

@ -2,16 +2,16 @@
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.linkable.toolchain.parse import parse from bu4.linkable.toolchain.parse import parse
from bu4.linkable.toolchain.stdext import standard_extension from bu4.linkable.toolchain.stdext import standard_extensions
from bu4.linkable.toolchain.transply import transply from bu4.linkable.toolchain.transply import transply
from bu4.linking.evaluable_from_parsed import evaluable_from_parsed
__all__ = ('synced',) __all__ = ('synced',)
def synced(source: str) -> EValue: def synced(source: str) -> EValue:
bsource = transply(source) bsource = transply(source)
parsed = parse(bsource, standard_extension) parsed = parse(bsource, standard_extensions)
evaluable = evaluable_from_parsed({}, parsed) evaluable = evaluable_from_parsed({}, parsed)
return sync(evaluable) return sync(evaluable)