88 lines
1.7 KiB
Python
88 lines
1.7 KiB
Python
from __future__ import annotations
|
|
from enum import Enum
|
|
from typing import Any, TYPE_CHECKING
|
|
|
|
# from core.environment import Environment
|
|
|
|
if TYPE_CHECKING:
|
|
from core.environment import Environment
|
|
|
|
class Lambda:
|
|
"""Lambda function with arguments, body, and closure environment"""
|
|
|
|
args: Any
|
|
body: Any
|
|
env: Environment
|
|
|
|
def __init__(self, args: Any, body: Any, env: Environment) -> None:
|
|
self.args: Any = args
|
|
self.body: Any = body
|
|
self.env: Environment = env
|
|
|
|
class Dambda:
|
|
"""Dambda function"""
|
|
|
|
args: Any
|
|
body: Any
|
|
|
|
def __init__(self, args: Any, body: Any) -> None:
|
|
self.args: Any = args
|
|
self.body: Any = body
|
|
|
|
class Macro:
|
|
"""Macro definition"""
|
|
|
|
args: Any
|
|
body: Any
|
|
|
|
def __init__(self, args: Any, body: Any) -> None:
|
|
self.args: Any = args
|
|
self.body: Any = body
|
|
|
|
class Pure():
|
|
"""Pure definition"""
|
|
|
|
args: Any
|
|
body: Any
|
|
|
|
def __init__(self, args: Any, body: Any) -> None:
|
|
self.args: Any = args
|
|
self.body: Any = body
|
|
|
|
class BaseToken(Enum):
|
|
"""Base class for enumerations"""
|
|
|
|
class SpecialForm(BaseToken):
|
|
EVAL = "eval"
|
|
IF = "if"
|
|
DO = "do"
|
|
PRINT = "print"
|
|
READ = "read"
|
|
SYMBOL = "symbol"
|
|
DEF = "def"
|
|
SET = "set!"
|
|
FLUSH = "flush"
|
|
PURE = "pure"
|
|
LAMBDA = "lambda"
|
|
DAMBDA = "dambda"
|
|
MACRO = "macro"
|
|
RAISE = "raise"
|
|
QUOTE = "quote"
|
|
CONS = "cons"
|
|
CAR = "car"
|
|
CDR = "cdr"
|
|
TYPEOF = "typeof"
|
|
|
|
class BinaryOperator(BaseToken):
|
|
ADD = "_+_"
|
|
SUB = "_-_"
|
|
MUL = "_*_"
|
|
DIV = "_/_"
|
|
MOD = "_%_"
|
|
STRCONCAT = "_++_"
|
|
|
|
class BinaryPredicate(BaseToken):
|
|
LT = "_<_"
|
|
GT = "_>_"
|
|
EQ = "_=_"
|