diff options
| author | mryouse | 2022-05-21 04:44:29 +0000 |
|---|---|---|
| committer | mryouse | 2022-05-21 04:44:29 +0000 |
| commit | 16c75f926f41cb9aa89a7cef4e859c10dd08b6e5 (patch) | |
| tree | 71354fbdf56c6273800804118c8d14e1e9f339b8 /parser.py | |
| parent | 310a53dc06a166c5ab448fa16461b110329d1c1c (diff) | |
lex and parse types
Diffstat (limited to 'parser.py')
| -rw-r--r-- | parser.py | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -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) |
