Os Compiladores
Por: Adalberto Pereira • 26/9/2018 • Trabalho acadêmico • 1.251 Palavras (6 Páginas) • 130 Visualizações
Compiladores
O projeto propõe a criação de um analisador léxico capaz de ler, identificar e agrupar os caracteres com o objetivo de formar unidades mínimas denominadas Lexer ou lexema, formadoras de tokem (tupla que contém um identificador referente ao tipo dele e o conteúdo ou valor no seguinte formato
Essa estrutura é responsável por identificar e armazenar determinados elementos de uma linguagem de programação, com base em sua gramatica.
Para este exemplo iremos adotar a linguagem Portugolo e sua gramática será apresentada abaixo no final deste documento.
O analisador léxico será composto por uma classe IdLexema, esta mantém todos os nomes dos tokens relacionados com os operadores que compõe a linguagem descrita (Operadores Aritméticos e relacionais, parentes e símbolos especiais), assim como os símbolos ou caracteres relacionados e os tipos de dados aceitos pela linguagem seguido de seus nomes em formato de comentário.
Operadores Aritméticos, Relacionais e Lógicos | Tipo de Dados | ||
EOF | ID | identificadores de Variáveis ou métodos | |
OP_ME | < | NUMERICO | números |
OP_MEI | <= | LOGICO | BOOLEANO |
OP_MA | > | NULO | NULO |
OP_MAI | >= | LITERAL | strings |
OP_IGD | = | KW | palavra reservada |
OP_DIF | <> | ||
OP_ATR | <-- | ||
OP_SUM | + | ||
OP_MEN | - | ||
OP_MUT | * | ||
OP_DIV | / | ||
OP_NEG | NÃO | ||
SMB_AP | ( | ||
SMB_FP | ) | ||
SMB_CL | , | ||
SMB_SEMICOLON | ; |
Tabela 1
A classe Token, por sua vez servira apenas para determinar a estrutura do tokem e sua identificação.
Esta classe possui métodos modificadores, também conhecidos como Getter's e Setter's, responsáveis por acessar e alterar o atributo de um objeto da classe, na medida que se faz necessário.
Possui também um atributo de linha e coluna para sua devida localização ao longo do código fonte ou arquivo que servira de base para leitura e teste do analisador.
E um método toString que irá realizar a impressão dos dados do token,
A classe chamada TabelaHash, servira como uma lista ou tabela que irá armazenar e realizar uma carga para à memória no início da execução do código referente ao Analisador Léxico.
Tabela de Palavras Reservadas | |
algoritmo | subrotina |
declare | retorne |
escreva | enquanto |
leia | faca |
literal | para |
logico | ate |
numerico | repita |
nulo | VERDADEIRO |
se | FALSO |
inicio | Ou |
fim | E |
senao | Nao |
Tabela2
É composta por todas as palavras chaves da linguagem em questão. Na medida que quaisquer elementos forem identificados serão acrescidos nessa relação previamente definida que contem; palavras reservadas, tipos de dados, nomes de estruturas de seleção e/ou repetição e operadores lógicos.
A classe possui os métodos Input, responsável por cadastrar novos tokens
Este cadastro será feito posteriormente a validação na tabela de símbolos durante a execução do projeto, por meio do método comparaToken que recebe como parâmetro o nome do Lexema(idLexema), o valor do lexema (lexema), o número de linha e coluna onde o mesmo foi localizado durante a leitura do arquivo, considerando respectivamente a última coluna onde o caractere foi localizado.
Este método possui um objeto Token e o método devoleToken, a verificação do objeto token, caso este seja nulo (null), irá criar um novo objeto token que irá receber os atributos informados acima, para cadastrá-los na tabela de símbolos, por meio do método put, e irá realizar uma atribuição à linha e coluna respectiva onde este está localizado, e retorna este token.
O método toString, por sua vez imprime a localização dos tokens na tabela da biblioteca HashMap, que serve para associar/ identificar o valor de acordo com o tipo de informação aqui chamada tabelaSimbolos.
A classe AnalisarLexicoPortugolo, contém o método principal chamado main, que é o ponto inicial de execução do analisador.
Um laço de repetição Do...While, que irá repetir a execução do código até que o código que termine, essa verificação e feita pelo código"(token != null && token.getClasse() != IdLexema.EOF)", que verifica se o token é nulo, e a classe do token é diferente de fim de arquivo.
...