From 6a7e9ebb7818943ef85f15fbd0535de0d17d8efc Mon Sep 17 00:00:00 2001 From: weckyy702 Date: Tue, 22 Dec 2020 21:41:39 +0100 Subject: [PATCH] add interpretation support for do-while loops --- __pycache__/Iinstruction.cpython-39.pyc | Bin 4921 -> 4921 bytes interpret_source.py | 11 ++++++++++- res/input/input.java | 5 +++++ res/output/Nina.png | Bin 29484 -> 32353 bytes 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/__pycache__/Iinstruction.cpython-39.pyc b/__pycache__/Iinstruction.cpython-39.pyc index 9cf077e26b9c33f8807a102a083edbb3bb4d19d6..aa4a984853d1cc12768e87c34ec90e9463bd67f9 100644 GIT binary patch delta 26 gcmdm~wo{Eek(ZZ?0SI^^9&O|<6JoqIxk+d{09n)rk^lez delta 26 gcmdm~wo{Eek(ZZ?0SM}*KiJ4!Cd3#uxk+d{0AKtE!2kdN diff --git a/interpret_source.py b/interpret_source.py index 577a2b1..86ae496 100644 --- a/interpret_source.py +++ b/interpret_source.py @@ -18,7 +18,7 @@ def load_src(filepath: str) -> List[str]: try: with open(filepath) as file: for _line in file: - line = _line.strip() + line = _line.strip().replace(' ', '') if line and not re.match(r"""^//|^#|^COMMENT|^--""", line): lines.append(line) if line.__contains__('{'): @@ -57,6 +57,15 @@ def get_instructions_in_scope(src: List[str], start_idx: int = 0) -> Tuple[List[ if src[i].__contains__("else"): #if there is an else statement, check it false_instructions, i = get_instructions_in_scope(src, i+2) outer_scope.add_instruction(if_instruction(instruction_txt, true_instructions, false_instructions)) + + elif line.startswith("do{"): + logging.debug("Found start of do-while instruction in line: %i", i) + child_instructions, i = get_instructions_in_scope(src, i+1) + end_line = src[i] + #line: }while(...); + bracket_idx = end_line.rindex(");") + instruction_txt = end_line[7: bracket_idx] + outer_scope.add_instruction(while_instruction_back(instruction_txt, child_instructions)) else: logging.debug("Found generic instruction in line: %i", i+1) diff --git a/res/input/input.java b/res/input/input.java index d65e001..bb1fec8 100644 --- a/res/input/input.java +++ b/res/input/input.java @@ -17,6 +17,11 @@ while(shouldNiet()) { niet15(); niet16(); +do{ + niet21(); + niet22(); +}while(bool23); + // drehe("links"); // while(huegelVorhanden("rechts")) // { diff --git a/res/output/Nina.png b/res/output/Nina.png index 01f6fe4866f44015bc4c99a984dc12bda9025c81..9342de5263a98da4144a69c95787541e8e25c4b2 100644 GIT binary patch literal 32353 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 literal 29484 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 W{6in5hoCp4ZKmd1Ge7(Cum1;_^jDYw