Пример #1
0
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)
Пример #2
0
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()
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)