Files

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 = "_=_"