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)
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
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])
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)