Пример #1
0
class simturing:

    impArgs = InputArgs.InputArgs()
    impFile = InputFile.InputFile()
    outLine = Output.Output()
    machine = Machine.Machine()
    regex = Regex.Regex()
    prints = []
    numSteps = 0

    print(
        'Simulador de Máquina de Turing - Version 2.0\nDesenvolvido como trabalho prático para a disciplina de Teoria da Computação.\nAna Paula Silva Cunha, IFMG, 2018.\nRodrigo Sousa Alves, IFMG, 2018.\n'
    )

    # ---------------------------------------------------------------
    # --- 1. Ler argumentos (-r,-v,-s,-h, pathFile) via linha de comando
    paramArgs = impArgs.inputs()
    print('Argumentos de Entrada: ')
    print(paramArgs)

    # extrai parametros recebidos via argumento
    for p in paramArgs:
        if (p[0] == 'r') or (p[0] == 'v'):
            opcao = p[0]
            pathFile = p[1]
        elif (p[0] == 's'):
            opcao = p[0]
            steps = int(p[1])
            pathFile = p[2]
        elif (p[0] == 'h'):
            head = p[1]

    if paramArgs is None:
        print(
            'Informe os parâmentros de entrada, não há registro dos últimos parâmetros.'
        )
        exit()

    palavra = input('Forneça a palavra inicial: ')
    # palavra = 'baab'
    if palavra == '':
        print('Forneça uma palavra.')
        exit(1)

    # ---------------------------------------------------------------
    # --- 2. Rodar baseado nesses argumentos

    # leitura do arquivo de entrada
    linesFile = impFile.inputs(pathFile)

    # executa e imprime apenas o final da fita
    prints = machine.run(palavra, head, linesFile)

    if opcao == 'r':
        # Executa a maquina
        print(prints.pop())
    # executa e imprime passo a passo a fita
    elif opcao == 'v':
        # prints = machine.run(palavra, head, linesFile)
        for p in prints:
            print(p)
    # executa e imprime n passos da fita
    elif opcao == 's':
        # prints = machine.run(palavra, head, linesFile)
        if prints == None:
            print('500 interações')
        else:
            steps = int(steps)
            if steps > int(len(prints)):
                steps = len(prints) - 1
            cont = steps
            for p in prints:
                if (cont != 0):
                    print(p)
                    cont -= 1
            numSteps += steps

            while (True):
                op = input('\nForneça opção (-r, -v, -s) : ')
                print(op)
                if op is not '':
                    opcao = op.split()
                    # print('opcao: '+op)
                    # executa e imprime apenas o final da fita
                    if opcao[0] == '-r':
                        # Executa a maquina
                        # prints = machine.run(palavra, head, linesFile)
                        print(prints.pop())
                    # executa e imprime passo a passo a fita
                    elif opcao[0] == '-v':
                        # prints = machine.run(palavra, head, linesFile)
                        for p in prints:
                            print(p)
                    # executa e imprime n passos da fita
                    elif (opcao[0] == '-s'):
                        # prints = machine.run(palavra, head, linesFile)
                        steps = int(opcao[1])
                        if steps > int(len(prints)):
                            steps = len(prints) - 1
                        cont = steps
                        cont2 = 0
                        for p in prints:
                            if cont2 <= numSteps:
                                cont2 += 1
                            else:
                                # print('if not none -s')
                                if (cont != 0):
                                    print(p)
                                    cont -= 1
                        numSteps += steps
                    else:
                        exit(1)
                else:
                    # print('op '+op)
                    # print('con '+str(cont))
                    # if len(opcao) > 1:
                    # 	cont = int(opcao[1])
                    # 	steps = cont
                    # else:
                    cont = steps
                    if steps > int(len(prints)):
                        steps = len(prints) - 1
                    cont = steps
                    cont2 = 0
                    for p in prints:
                        if cont2 <= numSteps:
                            cont2 += 1
                        else:
                            # print('if not none -s')/
                            if (cont != 0):
                                print(p)
                                cont -= 1
                    numSteps += steps

    # print(outLine.newLineClear())
    # line = [model, self.bloco, self.estado, self.esquerda, self.cabecote, self.direita]

    # line1 = outLine.newLine('main','1','E','()','ba')
    # print(line1[0])
    # bloco = 'main'
    # estado = '10'
    # esquerda = ''
    # line = outLine.newLine(bloco,estado,esquerda,head,palavra)
    # print(line[0])
    # line = outLine.moveCabecote(line,'d')
    # print(line[0])
    # line = outLine.moveCabecote(line,'d')
    # print(line[0])
    # line = outLine.alteraCabecote(line,'d','D')
    # print(line[0])
    # line = outLine.moveCabecote(line,'e')
    # print(line[0])
    # line = outLine.moveCabecote(line,'e')
    # print(line[0])

    # line = 'bloco main 1 !'
    # par = regex.extraiParam(line)
    # print(par)
    # line = '10 moveFim 11'
    # par = regex.extraiParam(line)
    # print(par)
    # line = 'fim'
    # par = regex.extraiParam(line)
    # print(par)
    # line = '12 a -- A i 30'
    # par = regex.extraiParam(line)
    # print(par)

    # print('Cabecote: '+outLine.getCabecote(line))

    # --- 3. Solicitar novos argumentos (-r,-v,-s)
    # --- 4. Rodar baseado nesses argumentos
    #
    #

    # extrairParam e executaParam parametros em funcoes separadas?
    # classe Machine com funcoes do tipo
    # 	modoR
    # 		Executa tudo
    # 		Imprime resultado
    # 	modoV
    # 		Executa tudo
    # 		exibe o passo a passo
    # 	modoS
    # 		executa n vezes
    # 		exibe passo a passo