def main(): global CONT_ESTADO, AFND, ESTADOS, CONT_LINHA # abre o arquivo em modo de leitura arquivo = open('codOtimizado.txt', 'w') arquivo.write(str("")) arquivo.close() with open("entrada.txt", "r") as arquivo: for linha in arquivo: if linha[len(linha) - 1] != '\n': linha = linha + '\n' if not AFND: est = Estado() est.rotulo = CONT_ESTADO est.inicial = True est.rotuloGr = 'S' AFND.append(est) CONT_ESTADO += 1 elif linha[0] == '<' and linha[1] != '=' and linha[1] != '\n': le_gramatica(linha) else: le_token(linha) determinizar() mortos() insere_estado_erro() gerar_csv() print_erros(lexic(), ERRO_LEX) print_tabela_simbolos() if not TABELA_ERROS: aceita = analise_sintatica() if aceita: analise_semantica() gera_codigo_intermediario() otimizacao()
def determinizar(): global AFND, AFD, CONT_ESTADO CONTADOR = 0 fila = [] fila_aux = [] lista = [] lista.append(AFND[0].rotulo) fila.append(lista) fila_aux.append(lista) while fila: est = Estado() est.rotulo = CONTADOR CONTADOR += 1 for j in ALFABETO: cont = 0 trans = Transicao() trans.rotulo = j for i in fila[0]: if AFND[i].final: est.final = True if AFND[i].inicial: est.inicial = True if AFND[i].eh_token: est.eh_token = True if not AFND[i].eh_token: if AFND[i].tipo == 0: est.tipo = 0 else: est.tipo = 1 for k in AFND[i].transicoes: if k.rotulo == j: for l in k.transicoes: if l not in trans.transicoes: trans.transicoes.append(l) trans.transicoes.sort() if trans.transicoes not in fila_aux: if trans.transicoes: fila.append(trans.transicoes) fila_aux.append(trans.transicoes) for c in fila_aux: if c == trans.transicoes: trans.trans = cont cont += 1 est.transicoes.append(trans) AFD.append(est) fila.pop(0)
def __init__(self, arquivo): self._count_estado = 0 self._count_gramatica = 0 self.estados = [] self.alfabeto = [] for linha in arquivo: if linha[len(linha) - 1] != '\n': linha = linha + '\n' if not self.estados: est = Estado() est.rotulo = self._count_estado est.inicial = True est.rotuloGr = 'S' self.estados.append(est) self._count_estado += 1 elif linha[0] == '<' and linha[1] != '=' and linha[1] != '\n': self._le_gramatica(linha)