started interpreter rework

This commit is contained in:
weckyy702
2020-12-30 16:31:10 +01:00
parent ea5b92f3eb
commit afe4dd8a21

View File

@@ -19,10 +19,16 @@ class Function_scope(Iterable):
self.return_type = return_type self.return_type = return_type
self.args = args self.args = args
def get_height(self) -> int:
h = 0.0
for inst in self.contents:
h += inst.getblksize()
return int(h)
def __iter__(self): def __iter__(self):
return self.contents.__iter__() return self.contents.__iter__()
COMMENT_PATTERN = re.compile(r"""^//|^/\*\*|^\*|^--""") COMMENT_PATTERN = re.compile(r"""^(//|--|#).*""")
REMOVE_KEYWORDS = [' ', ';', "public", "private", "final", "protected"] REMOVE_KEYWORDS = [' ', ';', "public", "private", "final", "protected"]
VARIABLE_TAGS = ["byte", "short", "int", "long", "float", "double", "boolean", "char", "String"] VARIABLE_TAGS = ["byte", "short", "int", "long", "float", "double", "boolean", "char", "String"]
FUNCTION_IDENTIFIERS = ["void"] FUNCTION_IDENTIFIERS = ["void"]
@@ -31,13 +37,12 @@ FUNCTION_IDENTIFIERS.extend(VARIABLE_TAGS)
WHILE_TAG = "solange " #german for 'while'. Change this depending on your language WHILE_TAG = "solange " #german for 'while'. Change this depending on your language
REPLACE = dict((re.escape(k), '') for k in REMOVE_KEYWORDS) REPLACE = dict((re.escape(k), '') for k in REMOVE_KEYWORDS)
remove_pattern = re.compile("|".join(REPLACE.keys())) remove_pattern = re.compile("|".join(REPLACE.keys()), flags=re.MULTILINE)
variable_regex = "^(" variable_regex = "^("
for kw in VARIABLE_TAGS: for kw in VARIABLE_TAGS:
variable_regex += fr"""{kw}|""" variable_regex += fr"""{kw}|"""
variable_pattern = re.compile(variable_regex[0:-1]+")(.*=|.*;)(.*)") variable_pattern = re.compile(variable_regex[0:-1]+")(.*)=?(.*)", flags=re.MULTILINE)
print(variable_pattern)
function_regex = "^(" function_regex = "^("
for kw in FUNCTION_IDENTIFIERS: for kw in FUNCTION_IDENTIFIERS:
@@ -173,6 +178,7 @@ def handle_instruction(line: str, src: List[str], i: int) -> Tuple[Iinstruction,
elif variable_pattern.match(line): elif variable_pattern.match(line):
logging.debug("Found variable in line %i", i+1) logging.debug("Found variable in line %i", i+1)
print("found variable in line ", i+1)
return handle_variable(line, src, i) return handle_variable(line, src, i)
else: else:
@@ -224,6 +230,13 @@ def get_function_scopes(src: List[str]) -> List[Function_scope]:
i+=1 i+=1
return functions return functions
def remove_keywords(src: str) -> str:
without_comments = ""
for line in src.splitlines(True):
if line != "\n" and not COMMENT_PATTERN.match(line):
without_comments += line
return remove_pattern.sub('', without_comments)
def load_scoped_instructions(filepath: str) -> List[Function_scope]: def load_scoped_instructions(filepath: str) -> List[Function_scope]:
src = load_src(filepath) src = load_src(filepath)
return get_function_scopes(src) return get_function_scopes(src)