You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

27 lines
940 B

from misc.expression import Token
def tokenize(text: str) -> list:
buffer_num = ""
buffer_func = ""
tokens = []
for char in text:
if Token.isChar(char):
buffer_func += char
elif Token.isNumber(char) or char == ".":
buffer_num += char
else:
if buffer_num != "":
tokens.append(Token(Token.NUMBER, buffer_num))
buffer_num = ""
if buffer_func != "":
tokens.append(Token(Token.FUNCTION, buffer_func))
buffer_func = ""
if char == "(" or char == ")":
tokens.append(Token(Token.PARENTHESE, char))
elif char != " ":
tokens.append(Token(Token.OPERATOR, char))
if buffer_num != "":
tokens.append(Token(Token.NUMBER, buffer_num))
if buffer_func != "":
tokens.append(Token(Token.FUNCTION, buffer_func))
return tokens