aboutsummaryrefslogtreecommitdiff
path: root/tokens.py
diff options
context:
space:
mode:
Diffstat (limited to 'tokens.py')
-rw-r--r--tokens.py68
1 files changed, 43 insertions, 25 deletions
diff --git a/tokens.py b/tokens.py
index cc8e7a7..a8f6268 100644
--- a/tokens.py
+++ b/tokens.py
@@ -16,25 +16,36 @@ class NebType(Enum):
SYMBOL = auto()
def __str__(self):
- return ":" + self.name.lower()
+ return self.name.lower()
-@dataclass
-class NebToken:
- type_: NebType
+class NebBaseType:
-class NebLiteral(NebToken):
+ def __init__(self, type_name, type_):
+ self.type_name = type_name
+ self.type_ = type_
- def __init__(self, type_, value):
- super().__init__(type_)
+ def __str__(self):
+ return f":{self.type_name}"
+
+class NebAny(NebBaseType):
+ def __init__(self, type_name, type_):
+ super().__init__("any", NebType.ANY)
+
+class NebLiteral(NebBaseType):
+
+ def __init__(self, type_name, type_, value):
+ super().__init__(type_name, type_)
self.value = value
def __str__(self):
fixed = str(self.value)
- if self.type_ == NebType.BOOL:
+ #if self.type_ == NebBaseType.BOOL:
+ if isinstance(self, NebBool):
fixed = f"#{str(self.value).lower()}"
- elif self.type_ == NebType.STRING:
+ #elif self.type_ == NebBaseType.STRING:
+ elif isinstance(self, NebString):
fixed = f'"{self.value}"'
- return f"{fixed} <{self.type_}>"
+ return f"{fixed} <:{self.type_name}>"
class NebSeparator():
pass
@@ -47,19 +58,19 @@ class NebClose(NebSeparator):
def __str__(self):
return ")"
-class NebSymbol(NebToken):
+class NebSymbol(NebBaseType):
def __init__(self, name):
- super().__init__(NebType.SYMBOL)
+ super().__init__("symbol", NebType.SYMBOL)
self.name = name
def __str__(self):
return f"'{self.name}"
-class NebExpression(NebToken):
+class NebExpression(NebBaseType):
def __init__(self, symbol, args):
- super().__init__(NebType.EXPR)
+ super().__init__("expr", NebType.EXPR)
self.symbol = symbol
self.args = args
self.returns = None
@@ -71,7 +82,7 @@ class NebExpression(NebToken):
out = f"({self.symbol}"
for arg in self.args:
out += f" {arg}"
- out += f") <{self.type_}> -> <{self.out_sig()}>"
+ out += f") <:{self.type_}> -> <{self.out_sig()}>"
return out
def in_sig(self):
@@ -83,9 +94,6 @@ class NebExpression(NebToken):
else:
return ":" + self.returns.lower()
- def sig(self):
- return (self.in_sig() + " > " + self.out_sig()).strip()
-
class NebFunction():
def __init__(self, name, args, returns):
@@ -93,12 +101,22 @@ class NebFunction():
self.args = args
self.returns = returns
- def in_sig(self):
- return " ".join(":" + x.name.lower() for x in self.args)
-
- def out_sig(self):
- return ":" + self.returns.lower()
+class NebBool(NebLiteral):
+ def __init__(self, value):
+ super().__init__("bool", NebType.BOOL, value)
+
+class NebString(NebLiteral):
+ def __init__(self, value):
+ super().__init__("string", NebType.STRING, value)
+
+class NebNumber(NebLiteral):
+ pass
+
+class NebInt(NebNumber):
+ def __init__(self, value):
+ super().__init__("int", NebType.INT, value)
- def sig(self):
- return (self.in_sig() + " > " + self.out_sig()).strip()
+class NebFloat(NebNumber):
+ def __init__(self, value):
+ super().__init__("float", NebType.FLOAT, value)