Você está na página 1de 18

Um software para Simulação das Análises do

Compilador Utilizando o Analisador


Automático JavaCC como Ferramenta de
Apoio
Ciência da Computação – CaN

 Autores:
 Aldefran Carvalho Feitosa
 Lidiane Oliveira dos Santos

 Orientadora:
 Rosiery Silva Maia
Roteiro
 Objetivos
 Introdução
 Metodologia
 Resultados
 Conclusão
 Referências
Objetivos

 Apresentar a construção de um software capaz de


simular um analisador léxico, sintático e semântico
para linguagem de programação C, com o auxílio
do analisador automático JavaCC.
Introdução

 Papéis do Compilador:
 Análise Léxica: Reconhecimento de tokens
 Análise Sintática: Ordem dos tokens
 Análise Semântica: Significado dos comandos e
coerência do código
JavaCC (Java Compiler Compiler)
 Ferramenta geradora de analisadores léxicos e
sintáticos.
 Está disponível para download gratuito no repositório
da Sun.
 Para a geração automática das classes responsáveis
pelas análises, é necessário um arquivo com extensão
jj, onde é feita a descrição dos tokens e a especificação
da sequência em que esses tokens podem aparecer.
 Esse arquivo é dividido em 4 partes:
 Opções
 Declaração da classe principal
 Declarações do analisador Léxico
 Declarações do analisador Sintático
Opções
 Essa seção é iniciada com a palavra “options”.
 Aceita vários parâmetros que alteram a geração dos

analisadores léxico e sintático.


 Esses parâmetros possuem valores default e só

precisam ser declarados se for necessário alterá-los.


 Alguns desses parâmetros são: STATIC,

DEBUG_PARSER e LOOKAHEAD.
 Ex.:

options{
STATIC = false;
}
Declaração da classe principal

PARSER_BEGIN (ParserJava)
public class ParserJava {
public static void init() throws ParseException {
...
}
}
PARSER_END (ParserJava)
 Em um método poderá ser feita a leitura do arquivo

contendo o código a ser analisado, a chamada às


análises léxica e sintática e a exibição dos resultados.
Declarações do analisador Léxico
 Definição dos tokens e caracteres ignorados.

SKIP : {
“ “ | “\n” | “\t”
}

TOKEN : {
<REPETICAO: "do" | "for" | "while" | "continue" > |
<PARADA: "break" | "return" >
}
Declarações do analisador Sintático

 Especificação de cada não-terminal da gramática.

void Selecao() : {}
{
(<IF> <ABRE_PARENTESE> Expressao()
<FECHA_PARENTESE> Instrucao() [<ELSE>
Instrucao()] | <SWITCH> <ABRE_PARENTESE>
Expressao() <FECHA_PARENTESE> Instrucao())
}
Classes Geradas
 eg1: Responsável pela análise sintática
 eg1TokenManager: Responsável pela análise léxica
 ParserException: Captura os erros da análise sintática
 TokenMgrError: Captura os erros da análise léxica
 eg1Constants: Interface entre a análise léxica e a
sintática
 SimpleCharStream: Fornece caracteres para a análise
léxica
 Token: Responsável pela identificação dos tokens
 Cada vez que é salva alguma alteração no arquivo jj as
classes geradas são atualizadas automaticamente.
Metodologia

 Pesquisa sobre a linguagem C


 Investigação detalhada sobre a fase da Análise
da compilação
 Compreensão do funcionamento da ferramenta
JavaCC
Resultados
 Introdução das expressões regulares e da gramática no
JavaCC, que lê o arquivo de entrada a procura de
tokens.
 Se todos os símbolos presentes nesse arquivo
estiverem declarados na lista de tokens o arquivo passa
pela análise léxica e a análise sintática é iniciada.
 Se todos tokens estiverem ordenados conforme descrito
na gramática, a análise sintática também é concluída
com sucesso.
 Desenvolvimento manual da análise semântica, uma vez
que o JavaCC não implementa esta etapa.
 Editor para a realização das análises e visualização dos
resultados, indicando se houve sucesso ou se o código
apresenta erro.
Resultados
Resultados
Resultados
Resultados
Conclusão
 O software agrega conhecimento da Análise da
compilação de um código, permitindo juntar os
resultados obtidos de um analisador automático para as
análises léxica e sintática com um mecanismo manual
de análise semântica.
Referências
 “Curso de Linguagem C”. Apostila, p. 129. Disponível em:
http://www.apostilando.com/download.php?cod=2375.
 DELAMARO, M. “Como Construir um Compilador Utilizando Ferramentas
Java. Aula 2 – BNF e Grafo Sintático”. Slides.
 DELAMARO, M. “Como Construir um Compilador Utilizando Ferramentas
Java. Aula 5 – Análise Léxica com JavaCC”. Slides.
 DELAMARO, M. “Como Construir um Compilador Utilizando Ferramentas
Java. Aula 7 – Análise Sintática com JavaCC”. Slides.
 GOMES, Í. H. S. “TVOICE: Um sistema de manipulação de linguagens para
auxiliar portadores de necessidades especiais através da web”. Dissertação
de Mestrado – Programa de Pós-graduação em Sistemas e Computação –
Universidade Federal do Rio Grande do Norte, Natal – RN, Brasil, 2005.
 SCHAAB, G. L. “Ferramenta de Suporte ao Processo de Refatoração em
Projetos de Software”. Trabalho de Conclusão de Curso – Centro Universitário
Feevale – Novo Hamburgo – RS, Brasil, 2006.
 STÜRMER, M. “JavaCC”. Artigo Científico – Universidade do Vale do Rio dos
Sinos, São Leopoldo – RS, Brasil, 2001.
 Tutorial JavaCC, disponível em:
http://www.engr.mun.ca/~theo/JavaCC-Tutorial/javacc-tutorial.pdf.

Você também pode gostar