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
27 lines
940 B
2 years ago
|
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
|