diff options
| author | mryouse | 2022-06-18 02:45:04 +0000 |
|---|---|---|
| committer | mryouse | 2022-06-18 02:45:04 +0000 |
| commit | d1a1c1592e610526c4a0432f93bd9ea6ae96d6e8 (patch) | |
| tree | df4c78f3ce5dfb1369d5fc6c155ca43e8bfc729f /parser.py | |
| parent | 065d138ca3013a4d1ef1aa3d7c48982d8bee5de2 (diff) | |
refactor: make neb a module
Diffstat (limited to 'parser.py')
| -rw-r--r-- | parser.py | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/parser.py b/parser.py deleted file mode 100644 index 46e43e7..0000000 --- a/parser.py +++ /dev/null @@ -1,67 +0,0 @@ -from structs import * - -def parseExpression(token, prev, tokens): - idx = 0 - args = [] - prev = token - while tokens[idx].type_ != TokenType.CLOSE_PAREN: - token = tokens[idx] - inc = 1 - if token.type_ == TokenType.OPEN_PAREN: - expr, inc = parseExpression(token, prev, tokens[idx+1:]) - args.append(expr) - 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, TokenType.LIST_TYPE, TokenType.NUMBER_TYPE, TokenType.BOOL_TYPE, TokenType.LITERAL_TYPE): - expr, inc = parseType(token, prev, tokens[idx+1:]) - args.append(expr) - else: - expr, inc = parseSymbol(token, prev, tokens[idx+1:]) - args.append(expr) - idx += inc - prev = token - - return List(args), idx + 2 # parens - -def parseSymbol(token, prev, tokens): - return Symbol(token.text, token.line), 1 - -def parseLiteral(token, prev, tokens): - 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 - -def parse(tokens): - idx = 0 - prev = None - exprs = [] - while tokens[idx].type_ != TokenType.EOF: - token = tokens[idx] - counter = 1 - if token.type_ == TokenType.OPEN_PAREN: - expr, counter = parseExpression(token, prev, tokens[idx+1:]) - exprs.append(expr) - 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, TokenType.LIST_TYPE, TokenType.NUMBER_TYPE, TokenType.BOOL_TYPE, TokenType.LITERAL_TYPE): - typ, counter = parseType(token, prev, tokens[idx+1:]) - exprs.append(typ) - else: - sym, counter = parseSymbol(token, prev, tokens[idx+1:]) - exprs.append(sym) - - idx += counter - prev = token - return exprs |
