Código fonte de src.reader

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import re as regex
from .patterns import * 

[documentos]class Reader(): """Classe para leitura e validação do arquivo de entrada.""" def __init__(self, filename): """ :param filename: Nome do arquivo de entrada. :type filename: str """ self.file = filename self.line_counter = 0
[documentos] def read_file(self): """Valida, linha por linha, o arquivo de entrada e retorna as estruturas que compõem a máquina de Turing mais a entrada. """ self.check_line(self.file.readline(), FIRST_LINE) Q = self.remove_blank(self.check_line(self.file.readline(), Q_LINE)) E = self.remove_blank(self.check_line(self.file.readline(), E_LINE)) r = self.remove_blank(self.check_line(self.file.readline(), r_LINE)) self.check_line(self.file.readline(), FIRST_S_LINE) S = [] S_pattern = create_S_pattern(Q,r) while(True): S.append(self.check_line(self.file.readline(), S_pattern)) # Se nao for a ultima transicao do arquivo if not ',' in S[-1][-1]: break self.check_line(self.file.readline(), LAST_S_LINE) q0 = self.check_line(self.file.readline(), q0_LINE) self.check_line(self.file.readline(), LAST_LINE) input = self.check_line(self.file.readline(), create_input_pattern(r)) return Q, S, q0[0], input[0]
[documentos] def remove_blank(self, line): """Remove espaços em branco e gera uma lista com dos valores separados por vírgula. :param line: Linha do arquivo de entrada :type line: str """ return line[0].replace(' ','').split(',')
[documentos] def check_line(self, line, expected): """Valida linha do arquivo de entrada reconhecendo padrões em regex, montados no módulo ``patterns`` :param line: Linha do arquivo de entrada :type line: str :param expected: Padrão regexp esperado para uma determinada linha do arquivo de entrada :type expected: str """ try: match = regex.match(expected, line) if not match: raise Exception('Formato de arquivo inválido') return match.groups() except Exception as error: sys.exit('Erro encontrado: ' + str(error) + ".\n\nLinha " + str(self.line_counter) \ + " do arquivo ")