aboutsummaryrefslogtreecommitdiff
path: root/parser.py
diff options
context:
space:
mode:
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