aboutsummaryrefslogtreecommitdiff
path: root/parser.py
diff options
context:
space:
mode:
authormryouse2022-06-04 03:13:30 +0000
committermryouse2022-06-04 03:13:30 +0000
commited78cd23f92b8b96dd7ffa3313be2262b0b29ff0 (patch)
tree34fd6ef2feeb82223e7e3ec7c5a79b5091d6ca08 /parser.py
parentb395d5d1cd122bb07017f23110f76249398a61bb (diff)
refactor: more literal types
Diffstat (limited to 'parser.py')
-rw-r--r--parser.py51
1 files changed, 11 insertions, 40 deletions
diff --git a/parser.py b/parser.py
index a781d50..166fc8d 100644
--- a/parser.py
+++ b/parser.py
@@ -1,42 +1,4 @@
-from structs import TokenType, Literal, Symbol, Type, List
-'''
-from lexer import TokenType
-
-class Expr:
-
- def accept(self, visitor):
- raise Exception("needs to be implemented")
-
- class Literal:
- def __init__(self, value):
- self.value = value
- def accept(self, visitor):
- visitor.visitLiteral(self)
- def __str__(self):
- return f"{self.value}"
-
- class Type:
- def __init__(self, name):
- self.name = name
- def __str__(self):
- return self.name
-
- class Symbol:
- def __init__(self, name):
- self.name = name
- def accept(self, visitor):
- visitor.visitSymbol(self)
- def __str__(self):
- return f"'{self.name}"
-
- class List:
- def __init__(self, args):
- self.args = args
- def accept(self, visitor):
- visitor.visitNary(self)
- def __str__(self):
- return "(" + " ".join(f"{arg}" for arg in self.args) + ")"
-'''
+from structs import *
def parseExpression(token, prev, tokens):
idx = 0
@@ -66,7 +28,16 @@ def parseSymbol(token, prev, tokens):
return Symbol(token.text), 1
def parseLiteral(token, prev, tokens):
- return Literal(token.value), 1
+ if token.type_ == TokenType.STRING:
+ return String(token.value), 1
+ elif token.type_ == TokenType.INT:
+ return Int(token.value), 1
+ elif token.type_ == TokenType.FLOAT:
+ return Float(token.value), 1
+ elif token.type_ in (TokenType.TRUE, TokenType.FALSE):
+ return Bool(token.value), 1
+ else:
+ return Literal(token.value), 1
def parseType(token, prev, tokens):
return Type(token.text), 1