code = "{@STRING(\"TEST\", \"\");@IF(\"2+3*4'\"2+3*4\"&&1'1\",\"{@RETURN(\"TRUE\");}\",\"{@RETURN(\"FALSE\");}\");@RETURN(TEST);}" def prepare_input(code: str) -> str: # original used right and left instructions for striping code from braces (yeah, they are unnecessary) code = code.strip() if code[0] == '{': code = code[1::] if code[-1] == '}': code = code[:-1] code = code.strip() # yep, another strip to remove spaces after removing braces return code def initializeBehaviours(code: str) -> str: code_lines = [] depth = 0 tmp_buffer = "" for i, c in enumerate(code): if c == '(': depth += 1 tmp_buffer += c continue elif c == ')': depth -= 1 tmp_buffer += c continue elif c == ';': if depth == 0: code_lines.append(tmp_buffer) tmp_buffer = "" continue else: tmp_buffer += c continue elif c == ' ': continue else: tmp_buffer += c return code_lines def parse_line(line: str): if line.endswith(';'): line = line[:-1] # make sure to remove the trailing semicolon if it still exists current_char = line[0] left_paren_index = line.find('(') if current_char == '@': # special instruction # get the instruction name if left_paren_index == -1: left_paren_index = 1 instruction_name = line[1:left_paren_index] # assign runner (not implemented here, just a placeholder) # goto LABEL_40 elif current_char == "*": close_bracket_index = line.find(']') + 1 caret_index = line.find('^', close_bracket_index) if close_bracket_index >= left_paren_index: caret_index = line.find('^') else: left_paren_index = line.find('(', caret_index) target_name = line[1:caret_index] if target_name[0] == "[": target_name = target_name[1:-1] # remove the brackets # object = new CMC_Expression else: # object = CMC_ObjectsContainer::getObject pass method_name = line[caret_index + 1:left_paren_index] # goto LABEL_40 elif line.startswith("THIS"): method_name = line[5:left_paren_index] # goto LABEL_40 pass if __name__ == '__main__': prepared_code = prepare_input(code) print("Prepared code:") print(prepared_code) print("\nCode lines:") code_lines = initializeBehaviours(prepared_code) for line in code_lines: print(line) for line in code_lines: parse_line(line)