diff options
Diffstat (limited to 'parser.py')
| -rw-r--r-- | parser.py | 51 |
1 files changed, 11 insertions, 40 deletions
@@ -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 |
