コード例 #1
0
ファイル: main.py プロジェクト: TADebastiani/COMPILADORES
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()
コード例 #2
0
ファイル: main.py プロジェクト: TADebastiani/COMPILADORES
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)
コード例 #3
0
ファイル: afnd.py プロジェクト: TADebastiani/COMPILADORES
    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)