def WHILE(): Fun.object_gen() Config.Iteratables[-1] = Classes.COND_STATEMENT() line_list = [] line_split = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number].split() if line_split[-1] == "DO": del line_split[-1] Config.Iteratables[-1].Cond = line_split stat = Config.Iteratables[-1].Cond # Conditional Statement cond = Config.Iteratables[-1].Cond if len(cond) == 4: Config.Iteratables[-1].Cond = Fun.comp(cond[1], cond[3], cond[2]) while True: Config.Iteratables[-2].line_number += 1 try: Config.Iteratables[-2].cur_line = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number] line_list.append(Config.Iteratables[-2].cur_line) line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "WHILE": Classes.Loop_Counts.While += 1 if line_split[0] == "ENDWHILE" and Classes.Loop_Counts.While == 0: del line_list[-1] break if line_split[0] == "ENDWHILE": Classes.Loop_Counts.While -= 1 except IndexError: pass # Config.Iteratables[-2].line_number -= 1 Config.Iteratables[-1].line_list = line_list while Config.Iteratables[-1].Cond: while Config.Iteratables[-1].line_number < len( Config.Iteratables[-1].line_list): cur_line = Config.Iteratables[-1].line_list[ Config.Iteratables[-1].line_number] main(cur_line) Config.Iteratables[-1].line_number += 1 Config.Iteratables[-1].line_number = 0 Config.Iteratables[-1].Cond = Fun.comp(stat[1], stat[3], stat[2]) del Config.Iteratables[-1]
def REPEAT(): Fun.object_gen() Config.Iteratables[-1] = Classes.COND_STATEMENT() line_list = [] while True: Config.Iteratables[-2].line_number += 1 try: Config.Iteratables[-2].cur_line = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number] line_list.append(Config.Iteratables[-2].cur_line) line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "REPEAT": Classes.Loop_Counts.Repeat += 1 if line_split[0] == "UNTIL" and Classes.Loop_Counts.Repeat == 0: Config.Iteratables[-1].Cond = line_split stat = Config.Iteratables[-1].Cond # Conditional Statement cond = Config.Iteratables[-1].Cond if len(cond) == 4: Config.Iteratables[-1].Cond = Fun.comp( cond[1], cond[3], cond[2]) del line_list[-1] break if line_split[0] == "UNTIL": Classes.Loop_Counts.Repeat -= 1 except IndexError: pass # Config.Iteratables[-2].line_number -= 1 Config.Iteratables[-1].line_list = line_list while True: while Config.Iteratables[-1].line_number < len( Config.Iteratables[-1].line_list): cur_line = Config.Iteratables[-1].line_list[ Config.Iteratables[-1].line_number] main(cur_line) Config.Iteratables[-1].line_number += 1 Config.Iteratables[-1].line_number = 0 Config.Iteratables[-1].Cond = Fun.comp(stat[1], stat[3], stat[2]) if Config.Iteratables[-1].Cond: break del Config.Iteratables[-1]
def IF(): Fun.object_gen() Config.Iteratables[-1] = Classes.COND_STATEMENT() found_endif = False alt_lines = True line_list = [] line_split = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number].split() if line_split[-1] == "THEN": del line_split[-1] else: Config.Iteratables[-2].line_number += 1 Config.Iteratables[-1].Cond = line_split cond = Config.Iteratables[-1].Cond if len(cond) == 4: Config.Iteratables[-1].Cond = Fun.comp(cond[1], cond[3], cond[2]) if Config.Iteratables[-1].Cond: while True: Config.Iteratables[-2].line_number += 1 try: Config.Iteratables[-2].cur_line = Config.Iteratables[ -2].line_list[Config.Iteratables[-2].line_number] line_list.append(Config.Iteratables[-2].cur_line) line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "IF": Classes.Loop_Counts.If += 1 if line_split[0] == "ENDIF" and Classes.Loop_Counts.If == 0: found_endif = True del line_list[-1] break if line_split[0] == "ELSE" and Classes.Loop_Counts.If == 0: del line_list[-1] break if line_split[0] == "ENDIF": Classes.Loop_Counts.If -= 1 except IndexError: pass Config.Iteratables[-1].line_list = line_list while not found_endif: Config.Iteratables[-2].line_number += 1 Config.Iteratables[-2].cur_line = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number] line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "IF": Classes.Loop_Counts.If += 1 if line_split[0] == "ENDIF": if Classes.Loop_Counts.If == 0: break else: Classes.Loop_Counts.If -= 1 else: Classes.Loop_Counts.If = 1 while not (Classes.Loop_Counts.If == 1 and line_split[0] == "ELSE"): Config.Iteratables[-2].line_number += 1 Config.Iteratables[-2].cur_line = Config.Iteratables[-2].line_list[ Config.Iteratables[-2].line_number] line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "IF": Classes.Loop_Counts.If += 1 if line_split[0] == "ENDIF": Classes.Loop_Counts.If -= 1 if Classes.Loop_Counts.If == 0 and line_split[0] == "ENDIF": alt_lines = False break while Classes.Loop_Counts.If > 0 and line_split[ 0] != "ENDIF" and alt_lines: Config.Iteratables[-2].line_number += 1 try: Config.Iteratables[-2].cur_line = Config.Iteratables[ -2].line_list[Config.Iteratables[-2].line_number] line_list.append(Config.Iteratables[-2].cur_line) line_split = Config.Iteratables[-2].cur_line.split() if line_split[0] == "IF": Classes.Loop_Counts.If += 1 if line_split[0] == "ENDIF": Classes.Loop_Counts.If -= 1 del line_list[-1] except IndexError: pass Config.Iteratables[-1].line_list = line_list while Config.Iteratables[-1].line_number < len( Config.Iteratables[-1].line_list): cur_line = Config.Iteratables[-1].line_list[ Config.Iteratables[-1].line_number] main(cur_line) Config.Iteratables[-1].line_number += 1 del Config.Iteratables[-1]