From ed78cd23f92b8b96dd7ffa3313be2262b0b29ff0 Mon Sep 17 00:00:00 2001 From: mryouse Date: Sat, 4 Jun 2022 03:13:30 +0000 Subject: refactor: more literal types --- parser.py | 51 +++++++++++---------------------------------------- 1 file changed, 11 insertions(+), 40 deletions(-) (limited to 'parser.py') 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 -- cgit v1.2.3