Example #1
0
def run_conditional(input_stream):
    cond_body = take_tokens("IF", "ENDIF", input_stream)
    if "ELSE" not in cond_body:
        # This is a simple statement. No ELSE to contend with.
        if Data.pop() == TRUE:
            consume_tokens(cond_body)
    else:
        iftrue = take_tokens("IF", "ELSE", cond_body)
        otherwise = cond_body
        if Data.pop() == TRUE:
            consume_tokens(iftrue)
        else:
            consume_tokens(otherwise)
Example #2
0
def run_whileloop(while_loop_body):
    code1_and_flag = take_tokens("WHILE", "REPEAT", while_loop_body)
    code2 = while_loop_body

    flag_value = TRUE
    while flag_value == TRUE:
        consume_tokens(copy(code1_and_flag))
        if Data.pop() == TRUE:
            consume_tokens(copy(code2))
        else:
            flag_value = FALSE
Example #3
0
def set_or_get_variable(token, input_stream):
    next_token = next(input_stream)

    if next_token not in ("!", "@"):
        input_stream.clear()
        raise SyntaxError(
            f"""Was trying to get or set '{token}', but missing ! or @""")

    if next_token == "!":
        Memory[token] = Data.pop()
    else:  # next_token == "@"
        Data.push(Memory[token])
Example #4
0
def run_doloop(word_list):
    _from, _to = Data.pop(), Data.pop()

    for i in range(_from, _to):
        input_list = _resolve_iterator(i, copy(word_list))
        consume_tokens(input_list)