diff --git a/NassiShneidermann.py b/NassiShneidermann.py index 766e210..b7fc90b 100644 --- a/NassiShneidermann.py +++ b/NassiShneidermann.py @@ -1,7 +1,7 @@ +from os import cpu_count from code_to_image import NSD_save from Iinstruction import Iinstruction import logging -import re class NassiShneidermanDiagram: @@ -29,49 +29,16 @@ class NassiShneidermanDiagram: x, y = instruction.to_image(x, y, x_sz, 200) cti.NSD_save(filename) - @staticmethod - def load_code_lines(filepath): - lines = [] - try: - with open(filepath) as file: - for _line in file: - line:str = _line.strip() - if line and not re.match(r"""^//|^#|^COMMENT|^--""", line): - lines.append(line) - except: - logging.error(f"Failed to open input file {filepath}!") - - return lines - - def load_from_file(self, filepath: str): - filtered_lines = self.load_code_lines(filepath) - global_scope = [] - current_scope = global_scope - for line in filtered_lines: - logging.debug(line) - if line.__contains__('}'): - current_scope.append("scope exit") - current_scope = global_scope[-1] # does not get correct parent scope - #TODO: get correct parent scope - if line.__contains__('{'): - current_scope.append("scope enter") - current_scope.append([]) - current_scope = current_scope[-1] - - elif not line.__contains__('}'): - current_scope.append("generic instruction") - print(global_scope) - -"""if __name__ == "__main__": +if __name__ == "__main__": #for debugging from Iinstruction import * NSD = NassiShneidermanDiagram(True) - NSD.load_from_file("res/input/input.java") + #NSD.load_from_file("res/input/input.java") - NSD.convert_to_image("Nina", 500)""" + NSD.convert_to_image("Nina", 500) diff --git a/__pycache__/Iinstruction.cpython-39.pyc b/__pycache__/Iinstruction.cpython-39.pyc new file mode 100644 index 0000000..c1ec049 Binary files /dev/null and b/__pycache__/Iinstruction.cpython-39.pyc differ diff --git a/__pycache__/code_to_image.cpython-39.pyc b/__pycache__/code_to_image.cpython-39.pyc new file mode 100644 index 0000000..f25e639 Binary files /dev/null and b/__pycache__/code_to_image.cpython-39.pyc differ diff --git a/interpet_source.py b/interpet_source.py new file mode 100644 index 0000000..03ddb4f --- /dev/null +++ b/interpet_source.py @@ -0,0 +1,64 @@ +import logging +import re +from typing import Iterator + +class Scope(): + + def __init__(self, enclosing_scope) -> None: + self.enclosing_scope = enclosing_scope + self.contents = [] + + def add_instruction(self, instruction) -> None: + self.contents.append(instruction) + + def add_subscope(self, subscope) -> None: + self.contents.append(subscope) + +def load_src(filepath: str) -> list[str]: + lines = [] + try: + with open(filepath) as file: + for _line in file: + line:str = _line.strip() + if line and not re.match(r"""^//|^#|^COMMENT|^--""", line): + lines.append(line) + except: + logging.error(f"Failed to open input file {filepath}!") + + return lines + +def read_scopes(src: list[str]): + global_scope = Scope(None) + current_scope = global_scope + + for line in src: + logging.debug(line) + if line.__contains__('}'): + current_scope.add_instruction("scope exit") + current_scope = current_scope.enclosing_scope + if line.__contains__('{'): + current_scope.add_instruction("scope enter") + subscope = Scope(current_scope) + current_scope.add_subscope(subscope) + current_scope = subscope + + elif not line.__contains__('}'): + current_scope.add_instruction("generic instruction") + + return global_scope + +def print_scope(scope: Scope): + print('[', end='') + for item in scope.contents: + if isinstance(item, Scope): + print_scope(item) + else: + print(item, end=", ") + print(']') + +if __name__ == "__main__": + logging.basicConfig(level=logging.DEBUG) + lines = load_src("res/input/input.java") + scope = read_scopes(lines) + + print_scope(scope) \ No newline at end of file diff --git a/res/output/Nina.png b/res/output/Nina.png index 6f46d69..987d273 100644 Binary files a/res/output/Nina.png and b/res/output/Nina.png differ