45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
|
|
class Line:
|
||
|
|
def __init__(self, keyword: str, argument: str):
|
||
|
|
self.keyword: str = keyword
|
||
|
|
self.argument: str = argument
|
||
|
|
|
||
|
|
def preprocess(code: str) -> list[Line]:
|
||
|
|
token : str = ""
|
||
|
|
keyword : str = ""
|
||
|
|
tokenise : list[Line] = []
|
||
|
|
isString : bool = False
|
||
|
|
isComment : bool = False
|
||
|
|
isKeyword : bool = True
|
||
|
|
for i in code:
|
||
|
|
if i == "\n":
|
||
|
|
isComment = False
|
||
|
|
elif i == "#":
|
||
|
|
isComment = True
|
||
|
|
elif isComment:
|
||
|
|
pass
|
||
|
|
elif i == '"':
|
||
|
|
isString = not(isString)
|
||
|
|
token += i
|
||
|
|
elif isString:
|
||
|
|
token += i
|
||
|
|
elif (i == ';') | (i == '{') | (i == '}'):
|
||
|
|
if i != ';':
|
||
|
|
token += i
|
||
|
|
tokenise.append(Line(keyword, token))
|
||
|
|
token = ''
|
||
|
|
keyword = ''
|
||
|
|
isKeyword = True
|
||
|
|
elif (i != ' '):
|
||
|
|
if (i == '('):
|
||
|
|
isKeyword = False
|
||
|
|
|
||
|
|
if isKeyword:
|
||
|
|
keyword += i
|
||
|
|
else:
|
||
|
|
token += i
|
||
|
|
|
||
|
|
if (i == '='):
|
||
|
|
isKeyword = False
|
||
|
|
|
||
|
|
tokenise.append(Line(keyword, token))
|
||
|
|
return tokenise
|