Exemplo n.º 1
0
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('index'))
    return render_template('xtm.html', title='XTM', form=form)
Exemplo n.º 2
0
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',
                                    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ý viac páskový DTM: '+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('xtm.html',  title='XTM', form=form)