From f3ed00e5f2c3cf9bcda79aa3188cfd638f4e773d Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Wed, 22 Apr 2020 02:52:52 -0500 Subject: [PATCH] Added negative number support in the tokenizer. --- tokenizer.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/tokenizer.py b/tokenizer.py index 92fe785..b4c4a72 100644 --- a/tokenizer.py +++ b/tokenizer.py @@ -24,6 +24,17 @@ def get_tokens_from_expression_string(expression_string): parsing_number = True tmp = tmp + c continue + + elif c == '-' and not parsing_number: + if expression_string[i + 1] == '.' or expression_string[i + 1].isdigit(): + tmp = "-" + parsing_number = True + else: + tokens.append(token.Token(c, token.TokenType.get_operator(c))) + parsing_number = False + tmp = "" + continue + elif c == '(': if parsing_number: tokens.append(token.Token(tmp, token.TokenType.constant)) @@ -50,7 +61,7 @@ def get_tokens_from_expression_string(expression_string): if len(tokens) > 1: lookBehind = tokens[-1] if lookBehind.type == token.TokenType.exp_end: - tokens.append(token.Token("^", token.TokenType.power)) + tokens.append(token.Token("^", token.TokenType.power)) if (i + 1) < len(expression_string): lookAHead = expression_string[i + 1] @@ -73,6 +84,11 @@ def get_tokens_from_expression_string(expression_string): return tokens +def peek_list(tokens): + if tokens: + return tokens[-1] + else: + raise IndexError("The token list is empty.", tokens) def replace_variables(tokens, new_constants): newTokenList = []