FUNCTION CHECK(TM :TM_PTR; STATE :K; SYM :TAPE_SYM) :BOOLEAN; BEGIN CHECK := TRUE; IF NOT(STATE IN TM^.STAT_PTR^) THEN CHECK := FALSE; IF NOT(SYM IN TM^.TAPE_PTR^) THEN CHECK := FALSE END; FUNCTION EXEC_TM(TM :TM_PTR; VAR INPUT_TAPE :TAPE) :RESULT; VAR CURRENT_STATE :K; CONFIG :NEXT_CONFIG; HEAD :INTEGER; BEGIN HEAD :=1; CURRENT_STATE :=TM^.INIT_PTR^; WHILE CHECK(TM, CURRENT_STATE, INPUT_TAPE[HEAD]) DO BEGIN CONFIG := TM^.TABLE_PTR^[CURRENT_STATE,INPUT_TAPE[HEAD]]; CURRENT_STATE := CONFIG.STATE; INPUT_TAPE[HEAD] := CONFIG.T_SYM; CASE CONFIG.MOV OF 0 :HEAD := HEAD - 1; 1 :HEAD := HEAD + 1; END; IF CURRENT_STATE > 0 THEN CURRENT_STATE := 5 END; IF CURRENT_STATE IN TM^.FINAL_PTR^ THEN EXEC_TM := ACCEPT ELSE EXEC_TM := REJECT END;