Baixe o app para aproveitar ainda mais
Prévia do material em texto
Cleber Gonçalves da Silva RA:1299142695 Relatório Dentro dos estudos oferecidos pelo professor mais os estudos individuais, foi aplicado a área de conhecimento de autômatos e compiladores. Em etapa estruturei os estados conforme a gramática transpassada e implementei o código conforme solicitação do professor. Com base no conhecimento adquirido, foi aplicado todos os recursos e estudos oferecido pelo professor em sala de aula. Otimizando a estrutura dos estados, para melhor implementação da sequência dos autômatos. No código para minha melhor implementação, foi aplicado uma estrutura em swit case, buscando assim a melhor condição para a leitura do autômato apresentado. Código do autômato package Analisadores; import Auxiliar.BufferEntrada; import Auxiliar.Tipos; import Elementos.TabelaSimbolos; import Elementos.Token; public class Analisador{ private BufferEntrada buffer; private TabelaSimbolos ts; private Token tk; Analisador(String endereco) { buffer = new BufferEntrada(endereco); ts = new TabelaSimbolos(); } public Token lex() { char lookahead = buffer.getNext(); int estado = 0; while (true) {//apenas aqui ? para implementar switch (estado) { case 0: switch (lookahead) { case '\n': case ' ': case '\t': estado = 0; buffer.getValue(); lookahead = buffer.getNext(); break; case 'C': case 'H': case 'J': case 'K': case 'L': case 'M': case 'P': case 'Q': case 'S': case 'U': case 'X': case 'Y': case 'Z': estado = 0; lookahead = buffer.getNext(); break; case 'V': estado = 1; lookahead = buffer.getNext(); break; case 'A': estado = 2; lookahead = buffer.getNext(); break; case 'R': estado = 3; lookahead = buffer.getNext(); break; case '0': estado = 4; lookahead = buffer.getNext(); break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'I': estado = 2; lookahead = buffer.getNext(); break; case 'F': estado = 6; lookahead = buffer.getNext(); break; case 'G': estado = 7; lookahead = buffer.getNext(); break; case 'O': estado = 8; lookahead = buffer.getNext(); break; case 'T': estado = 9; lookahead = buffer.getNext(); break; case '(': estado = 11; lookahead = buffer.getNext(); break; case ')': estado = 14; lookahead = buffer.getNext(); break; case '*': estado = 15; lookahead = buffer.getNext(); break; case '-': estado = 16; lookahead = buffer.getNext(); break; case '+': estado = 17; lookahead = buffer.getNext(); break; case '/': estado = 18; lookahead = buffer.getNext(); break; case '%': estado = 19; lookahead = buffer.getNext(); break; case 'W': estado = 24; lookahead = buffer.getNext(); break; case ':': estado = 29; lookahead = buffer.getNext(); break; case '>': estado = 30; lookahead = buffer.getNext(); break; case '<': estado = 31; lookahead = buffer.getNext(); break; case '=': estado = 33; lookahead = buffer.getNext(); break; case '!': estado = 35; lookahead = buffer.getNext(); break; case 'B': estado = 36; lookahead = buffer.getNext(); break; case 'E': estado = 37; lookahead = buffer.getNext(); break; case 'N': estado = 40; lookahead = buffer.getNext(); break; case 'D': estado = 43; lookahead = buffer.getNext(); break; default: System.out.println("Erro na sequencia " + buffer.getValue()); while (lookahead != ' ' || lookahead != '\n' || lookahead != '\t') { lookahead = buffer.getNext(); } estado = 0; } break; case 1: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'H': case 'J': case 'K': case 'L': case 'M': case 'N':case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 2; lookahead = buffer.getNext(); break; default: } break; case 2: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'H': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 3; lookahead = buffer.getNext(); break; default: } break; case 3: switch (lookahead) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': estado = 4; lookahead = buffer.getNext(); break; default: } break; case 4: tk = new Token(); tk.setTipo(Tipos.VAR); tk.setValor((String) buffer.getValue()); if (!ts.consultaTabela((String) tk.getValor())) { ts.insereSimbolo((String) buffer.getValue()); } return tk; case 6: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'H': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 2; lookahead = buffer.getNext(); break; case ':': estado = 7; break; default: } break; case 7: tk = new Token(); tk.setTipo(Tipos.DEFVAR); return tk; case 8: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'H': case 'J': case 'K': case 'L': case 'M': case 'N': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 2; lookahead = buffer.getNext(); break; case 'O': estado = 9; lookahead = buffer.getNext(); break; default: } break; case 9: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'H': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 3; lookahead = buffer.getNext(); break; case 'T': estado = 10; lookahead = buffer.getNext(); break; default: } break; case 10: switch (lookahead) { case 'O': estado = 11; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': estado = 4; break; default: } break; case 11: tk = new Token(); tk.setTipo(Tipos.SALTO); return tk; case 12: switch (lookahead) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'H': case 'J': case 'K':case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'X': case 'Y': case 'Z': case 'V': case 'I': case 'G': estado = 2; lookahead = buffer.getNext(); break; case 'F': estado = 13; lookahead = buffer.getNext(); break; default: } break; case 13: tk = new Token(); tk.setTipo(Tipos.SE); return tk; case 20: case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': estado = 20; lookahead = buffer.getNext(); break; case '.': estado = 22; lookahead = buffer.getNext(); break; default: } return null; } } }
Compartilhar