def ntm(): form = MyForm() if form.validate_on_submit(): tm = False states = parser1.dict_parse(form.states.data) states_dict = literal_eval(states) input_s = parser1.dict_parse(form.input_symbols.data) input_symbols_dict = literal_eval(input_s) tape_s = parser1.dict_parse(form.tape_symbols.data) tape_symbols_dict = literal_eval(tape_s) initial_state_d = form.initial_state.data if form.left_end.data: left_end_d = form.left_end.data else: left_end_d = '>' try: transitions_d = literal_eval(form.prechody.data) except: transitions_d = {} success_message = ("Neočakávaná chyba v prechodovej funkcii") flash(success_message) if form.blank_symbol.data: blank_symbol_d = form.blank_symbol.data else: blank_symbol_d = '#' reject_state_d = form.reject_state.data final_states_d = form.final_states.data try: ntm = NTM( states = states_dict, input_symbols= input_symbols_dict, tape_symbols= tape_symbols_dict, left_end = left_end_d, transitions = transitions_d, initial_state = initial_state_d, blank_symbol = blank_symbol_d, reject_state = reject_state_d, final_states = final_states_d ) if ntm: tm = True except(exceptions.InvalidStateError,exceptions.InvalidSymbolError,exceptions.MissingStateError,exceptions.MissingSymbolError, exceptions.InitialStateError,exceptions.FinalStateError,exceptions.RejectStateError,exceptions.LeftEndError, exceptions.RejectionError,exceptions.InvalidDirectionError) as err: tm = False success_message = (err) flash(success_message) if tm: try: tmachine = Tmachine(definicia= form.funkcia.data,tm_d_n_x='ntm', states =states,input_symbols = input_s, tape_symbols = tape_s,left_end = left_end_d, transitions = form.prechody.data, initial_state = initial_state_d, blank_symbol = blank_symbol_d,reject_state = reject_state_d, final_states = final_states_d) db.session.add(tmachine) db.session.commit() success_message = ('Nový NTM: '+form.funkcia.data+' je vytvorený') flash(success_message) return redirect(url_for('main.index')) except exc.IntegrityError: db.session().rollback() tm = False success_message = ("Definícia/Názov TM už existuje prosím zvolte iný názov") flash(success_message) return render_template('ntm.html', title='NTM', form=form)
def xtm(): form = MyForm() if form.validate_on_submit(): tm = False states = parser1.dict_parse(form.states.data) states_dict = literal_eval(states) input_s = parser1.dict_parse(form.input_symbols.data) input_symbols_dict = literal_eval(input_s) tape_s = parser1.dict_parse(form.tape_symbols.data) tape_symbols_dict = literal_eval(tape_s) initial_state_d = form.initial_state.data if form.left_end.data: left_end_d = form.left_end.data else: left_end_d = '>' try: transitions_d = literal_eval(form.prechody.data) except: transitions_d = {} success_message = ("Neočakávaná chyba v prechodovej funkcii") flash(success_message) if form.blank_symbol.data: blank_symbol_d = form.blank_symbol.data else: blank_symbol_d = '#' reject_state_d = form.reject_state.data final_states_d = form.final_states.data try: xdtm = XDTM(states=states_dict, input_symbols=input_symbols_dict, tape_symbols=tape_symbols_dict, left_end=left_end_d, transitions=transitions_d, initial_state=initial_state_d, blank_symbol=blank_symbol_d, reject_state=reject_state_d, final_states=final_states_d) if xdtm: tm = True except (exceptions.InvalidStateError, exceptions.InvalidSymbolError, exceptions.MissingStateError, exceptions.MissingSymbolError, exceptions.InitialStateError, exceptions.FinalStateError, exceptions.RejectStateError, exceptions.LeftEndError, exceptions.RejectionError, exceptions.InvalidDirectionError, exceptions.Badcounttapes) as err: tm = False success_message = (err) flash(success_message) if tm: try: tmachine = Tmachine(definicia=form.funkcia.data, tm_d_n_x='xtm') db.session.add(tmachine) db.session.commit() except exc.IntegrityError: db.session().rollback() tm = False success_message = ( "Definícia/Názov TM už existuje prosím zvolte iný názov") flash(success_message) if tm: name = str(tmachine.id) with open("tm{}.py".format(name), "w") as text_file: text_file.write( "from turing_machine.xdtm import XDTM \nxdtm = XDTM(" "\nstates = {0}" ",\ninput_symbols = {1}," "\ntape_symbols = {2},\nleft_end = '{3}'," "\ntransitions = {4}," "\ninitial_state = '{5}',\nblank_symbol = '{6}'," "\nreject_state = '{7}', \nfinal_states = '{8}' \n)". format(states_dict, input_symbols_dict, tape_symbols_dict, left_end_d, transitions_d, initial_state_d, blank_symbol_d, reject_state_d, final_states_d)) success_message = ('Nový viac páskový DTM: ' + form.funkcia.data + ' je vytvorený') flash(success_message) return redirect(url_for('main.index')) return render_template('xtm.html', title='XTM', form=form)
def upload(file): name = (file.readline()[:-2:]).decode("utf-8") druh = (file.readline()[:-2:]).decode("utf-8") states_u = (file.readline()[:-3:]).decode("utf-8") input_symbols_u = (file.readline()[:-3:]).decode("utf-8") tape_symbols_u = (file.readline()[:-3:]).decode("utf-8") left_end_u = (file.readline()[:-3:]).decode("utf-8") transitions_u = (file.readline()[:-3:]).decode("utf-8") initial_state_u = (file.readline()[:-3:]).decode("utf-8") blank_symbol_u = (file.readline()[:-3:]).decode("utf-8") reject_state_u = (file.readline()[:-3:]).decode("utf-8") final_states_u = (file.readline()[:-2:]).decode("utf-8") if druh == 'DTM': form = MyForm() druh = 'dtm' tm = False try: dtm = DTM(states=literal_eval(states_u), input_symbols=literal_eval(input_symbols_u), tape_symbols=literal_eval(tape_symbols_u), left_end=literal_eval(left_end_u), transitions=literal_eval(transitions_u), initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) if dtm: tm = True except (exceptions.InvalidStateError, exceptions.InvalidSymbolError, exceptions.MissingStateError, exceptions.MissingSymbolError, exceptions.InitialStateError, exceptions.FinalStateError, exceptions.RejectStateError, exceptions.LeftEndError, exceptions.RejectionError, exceptions.InvalidDirectionError) as err: tm = False success_message = (err) return success_message, druh if tm: try: tmachine = Tmachine( definicia=name, tm_d_n_x='dtm', states=states_u, input_symbols=input_symbols_u, tape_symbols=tape_symbols_u, left_end=literal_eval(left_end_u), transitions=transitions_u, initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) db.session.add(tmachine) db.session.commit() success_message = True return success_message, druh except exc.IntegrityError: db.session().rollback() tm = False success_message = ( "Názov turingovho stroja už existuje prosím zvolte iný názov" ) return success_message, druh elif druh == 'NTM': tm = False try: ntm = NTM(states=literal_eval(states_u), input_symbols=literal_eval(input_symbols_u), tape_symbols=literal_eval(tape_symbols_u), left_end=literal_eval(left_end_u), transitions=literal_eval(transitions_u), initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) if ntm: tm = True except (exceptions.InvalidStateError, exceptions.InvalidSymbolError, exceptions.MissingStateError, exceptions.MissingSymbolError, exceptions.InitialStateError, exceptions.FinalStateError, exceptions.RejectStateError, exceptions.LeftEndError, exceptions.RejectionError, exceptions.InvalidDirectionError) as err: tm = False success_message = (err) return success_message if tm: try: tmachine = Tmachine( definicia=name, tm_d_n_x='ntm', states=states_u, input_symbols=input_symbols_u, tape_symbols=tape_symbols_u, left_end=literal_eval(left_end_u), transitions=transitions_u, initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) db.session.add(tmachine) db.session.commit() success_message = True return success_message, druh except exc.IntegrityError: db.session().rollback() tm = False success_message = ( "Názov turingovho stroja už existuje prosím zvolte iný názov" ) return success_message, druh elif druh == 'XDTM': tm = False try: xdtm = XDTM(states=literal_eval(states_u), input_symbols=literal_eval(input_symbols_u), tape_symbols=literal_eval(tape_symbols_u), left_end=literal_eval(left_end_u), transitions=literal_eval(transitions_u), initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) if xdtm: tm = True except (exceptions.InvalidStateError, exceptions.InvalidSymbolError, exceptions.MissingStateError, exceptions.MissingSymbolError, exceptions.InitialStateError, exceptions.FinalStateError, exceptions.RejectStateError, exceptions.LeftEndError, exceptions.RejectionError, exceptions.InvalidDirectionError) as err: tm = False success_message = (err) return success_message if tm: try: tmachine = Tmachine( definicia=name, tm_d_n_x='xtm', states=states_u, input_symbols=input_symbols_u, tape_symbols=tape_symbols_u, left_end=literal_eval(left_end_u), transitions=transitions_u, initial_state=literal_eval(initial_state_u), blank_symbol=literal_eval(blank_symbol_u), reject_state=literal_eval(reject_state_u), final_states=literal_eval(final_states_u)) db.session.add(tmachine) db.session.commit() success_message = True return success_message, druh except exc.IntegrityError: db.session().rollback() tm = False success_message = ( "Názov turingovho stroja už existuje prosím zvolte iný názov" ) return success_message, druh elif druh == 'XNTM': pass #### VIACPASKOVY NEDETERMINISCKY TM else: success_message = "Turingov stroj nebolo možné načítať" druh = False return success_message, druh