def fun_for(input_str, index, variable: dict): from interpreter import main_loop var_name = input_str[index] input_str, index, variable = fun_expr(input_str, index + 2, variable) var_value = int(input_str[index]) # expr index += 1 for_type = input_str[index] input_str, index, variable = fun_expr(input_str, index + 1, variable) target = int(input_str[index]) # expr step = set_step(for_type) variable[var_name] = var_value while input_str[index] != '{': index += 1 index += 1 index_begin = index while variable[var_name] != target: index = index_begin input_str, index, variable = main_loop(input_str, index, variable) variable[var_name] += step del variable[var_name] if input_str[index] == '}': index += 1 # проверяем на вложенность, если вложенный просто возвращаем if input_str[index] == '}': return input_str, index, variable return main_loop(input_str, index, variable)
def main(): sa = True sa = syntax_analysis('grammar2', 'test2.txt', 'log2.txt') # Error because expr must be split in one str for interpret # if not sa: # print('please, FIX THE ERRORS! NOW!') # return None input_str = get_input('test2.txt') varaibles = {} print("WORK!\n") main_loop(input_str, 0, varaibles) print()
def fun_if(input_str, index, variable: dict): from interpreter import main_loop input_str, index, variable = fun_bool_expr(input_str, index, variable) condition = bool(input_str[index]) index = skip_braket('{', input_str, index) if condition: # если всё ок выполняем ветку if input_str, index, variable = main_loop(input_str, index, variable) index = skip_braket('}', input_str, index) if input_str[index] == 'else': index = skip_braket('}', input_str, index) else: # если нет - ветку else, если она есть index = skip_braket('}', input_str, index) if input_str[index] == 'else': index = skip_braket('{', input_str, index) input_str, index, variable = main_loop(input_str, index, variable) return main_loop(input_str, index, variable)
def fun_scan(input_str, index, variable: dict): a = input("\nI want a scan!\t") var_name = input_str[index] variable[var_name] = a index += 2 if input_str[index] == '}': return input_str, index, variable from interpreter import main_loop return main_loop(input_str, index, variable)
def fun_print(input_str, index, variable: dict): while input_str[index] != ';': if input_str[index] == '”': # если это строка index += 1 while input_str[index] != '”': print(input_str[index], end=' ') index += 1 print() elif input_str[index] == ',': # если несколько параметров index += 1 elif re.search(r'[\+\-*\/()]', input_str[index]): # если несколько параметров input_str, index, variable = fun_expr(input_str, index, variable) print(input_str[index]) else: # если это переменная print(get_value(input_str[index], variable)) index += 1 index += 1 if input_str[index] == '}': return input_str, index, variable from interpreter import main_loop return main_loop(input_str, index, variable)