aboutsummaryrefslogtreecommitdiff
path: root/parser.py
diff options
context:
space:
mode:
authormryouse2022-05-21 04:44:29 +0000
committermryouse2022-05-21 04:44:29 +0000
commit16c75f926f41cb9aa89a7cef4e859c10dd08b6e5 (patch)
tree71354fbdf56c6273800804118c8d14e1e9f339b8 /parser.py
parent310a53dc06a166c5ab448fa16461b110329d1c1c (diff)
lex and parse types
Diffstat (limited to 'parser.py')
-rw-r--r--parser.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/parser.py b/parser.py
index f331cfe..6acda5d 100644
--- a/parser.py
+++ b/parser.py
@@ -13,6 +13,12 @@ class Expr:
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
@@ -76,6 +82,9 @@ def parseExpression(token, prev, tokens):
elif token.type_ in (TokenType.STRING, TokenType.TRUE, TokenType.FALSE, TokenType.INT, TokenType.FLOAT):
expr, inc = parseLiteral(token, prev, tokens[idx+1:])
args.append(expr)
+ elif token.type_ in (TokenType.INT_TYPE, TokenType.FLOAT_TYPE, TokenType.STRING_TYPE, TokenType.ANY_TYPE):
+ expr, inc = parseType(token, prev, tokens[idx+1:])
+ args.append(expr)
else:
expr, inc = parseSymbol(token, prev, tokens[idx+1:])
args.append(expr)
@@ -90,6 +99,9 @@ def parseSymbol(token, prev, tokens):
def parseLiteral(token, prev, tokens):
return Expr.Literal(token.value), 1
+def parseType(token, prev, tokens):
+ return Expr.Type(token.text), 1
+
def parse(tokens):
idx = 0
prev = None
@@ -103,6 +115,9 @@ def parse(tokens):
elif token.type_ in (TokenType.FALSE, TokenType.TRUE, TokenType.STRING, TokenType.INT, TokenType.FLOAT):
lit, counter = parseLiteral(token, prev, tokens[idx+1:])
exprs.append(lit)
+ elif token.type_ in (TokenType.INT_TYPE, TokenType.FLOAT_TYPE, TokenType.STRING_TYPE, TokenType.ANY_TYPE):
+ typ, counter = parseType(token, prev, tokens[idx+1:])
+ exprs.append(typ)
else:
sym, counter = parseSymbol(token, prev, tokens[idx+1:])
exprs.append(sym)