Skip to content
Henrique edited this page Sep 7, 2018 · 6 revisions

Seja bem-vindo ao repositório do projeto de construção cooperativa do compilador da turma de 2018/2 dos cursos de Ciência da Computação e Engenharia de Computação do Campus de São Mateus da Universidade Federal do Espírito Santo (UFES). Aqui você encontra o código fonte do compilador e algumas anotações sobre o seu desenvolvimento. o portal que contém todas as informações da disciplina encontra-se no AVA da turma cujo nome é Compiladores 2018 (https://ava.ufes.br/).

Sobre o compilador:

O compilador proposto é híbrido, isto é, um tradutor composto de uma parte compilada e outra interpretada, tal como desenvolvido no exemplo do tópico anterior. A parte compilada é formada pela análise e síntese. A etapa da análise contém a análise léxica, sintática e semântica. A etapa da síntese contém a geração de código intermediário, o otimizador de código e a geração de código destino. Para a parte interpretada será usada a JVM (Java Virtual Machine).

O compilador é caracterizado como de três passagens:

1ª passagem: traduz o código fonte escrito em um arquivo texto para um código intermediário formado por estruturas de dados próximas do significado do código fonte. Por exemplo um laço será traduzido para uma estrutura de dados na memória que representa um laço.

2ª passagem: traduz o código intermediário anterior para um código formado por estruturas de dados mais próximas do código destino. Por exemplo, o laço agora será representado por um desvio condicional, já que na linguagem destino não existe laços.

3ª passagem: traduz a linguagem intermediária anterior para a linguagem destino, isto é, um arquivo texto formado pelos mnemônicos da JVM.

Sobre a metodologia:

A construção do compilador acontece de forma cooperativa com todos os alunos e apoiada pelo controle de versões distribuído GitHub. O desenvolvimento será sob o paradigma da Orientação a Objetos, na linguagem Java com apoio do compililer-to-compiler JavaCC, utilizando-se da IDE Eclipse munida dos plugins para o JavaCC e Egit.

No contexto da Engenharia de Software, a construção do compilador utiliza a metodologia de Modelo Incremental do Processo, pois existem requisitos razoavelmente bem definidos e necessidade em fornecer um conjunto de funcionalidades antes do término para depois ir refinando e expandindo nas próximas versões. Também será adotado o Modelo RAD (Rapid Application Development), pois a ênfase é num ciclo rápido de desenvolvimento (modelagem: negócio, dados e processo; e construção), com abordagem de construção baseada em componentes, requisitos bem compreendidos e o objetivo do projeto restrito permitindo a criação de um sistema plenamente funcional dentro de um período curto de tempo.

As participações são indicadas previamente pelo professor de acordo com as necessidades momentâneas da construção cooperativa do compilador por intermédio do prontuário da turma disponível no AVA . A avaliação será de acordo com o peso da tarefa e a qualidade da solução proposta, que deverá ser apresentada para a turma.

Num primeiro momento o compilador é definido de forma estreita, isto é, com poucas estruturas de controle, comandos, operadores etc. Nessa versão estreita são desenvolvidas todas as etapas: análises lexica, sintática e semântica, geração de códigos intermediários, otimização, geração de código destino destino e testes. Depois, o projeto de compilador é ampliado para poder suportar muitas outras estruturas, comandos, operadores etc, para ser desenvolvido de forma paralela por vários grupos de trabalho, passando por todas as etapas, até a versão final e definitiva.

Clone this wiki locally