Compiladores/Projecto de Compiladores/Material de Apoio ao Desenvolvimento

From Wiki**3

< Compiladores‎ | Projecto de Compiladores
Revision as of 21:05, 14 February 2015 by Root (talk | contribs)

Etapas de Análise de uma Lingugagem

O compilador, escrito em C++, realiza as seguintes etapas de análise para implementar a linguagem:

  • análise lexical (flex);
  • análise sintáctica (byacc);
  • análise semântica e geração de código (CDK e extensões).

Depois de criado, o compilador pode ser obtido para gerar programas:

  • obtenção dos vários módulos binários (compilação de assembly: yasm);
  • ligação dos módulos numa imagem executável (RTS).

Análises Lexical e Sintáctica: Flex e BYACC

 
 

As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório:

 
 

Estas duas etapas são realizadas pelas seguintes ferramentas:

  • análise lexical: gerador de analisadores lexicais: flex versão 2.5.37
  • análise sintáctica: gerador de analisadores LALR(1): byacc versão 1.9

O código por elas produzido é, então, incorporado pela CDK no compilador em construção, sendo ligado automaticamente às restantes etapas.

As duas ferramentas estão disponíveis para a maioria dos sistemas actuais. No entanto, apesar de o número de versão poder ser o mesmo, o código gerado pode variar e não ser compatível com o ambiente oficial de teste. Recomenda-se apenas a utilização do material fornecido pela disciplina.

A máquina virtual, fornecida para desenvolvimento do projecto, já contém estas ferramentas.

Análise semântica e geração de código: CDK10

Estas duas etapas são realizadas pelas classes da biblioteca CDK10, utilizando os padrões de desenho Composite (para representação dos nós da AST, criados pela etapa de análise sintáctica) e Visitor (classes que controlam as acções de verificação de tipos e geração de código).

A máquina virtual, fornecida para desenvolvimento do projecto, já contém esta biblioteca.

Compilação de código assembly para código binário: yasm

Esta fase já não é, estritamente, parte do processo de compilação (este termina quando é gerado o código máquina). No entanto, esta etapa é importante para se poderem obter programas executáveis.

A conversão do ficheiro assembly, produzido pelo compilador, num módulo binário é realizada pela ferramenta yasm, sendo utilizado o formato de linux/elf32.

A máquina virtual, fornecida para desenvolvimento do projecto, já contém esta ferramenta.

Ligação de módulos numa imgem executável: ld e RTS

A ligação dos módulos binários num programa executável (linking) é realizada pelo linker (em Linux, pelo programa GNU ld, incorporado em todas as distrubuições).

Além dos módulos que transportam o código do programador, traduzido para código máquina, é necessária a biblioteca RTS, que providencia ao programa as funções necessárias para interacção do programa com o ambiente de execução e com o utilizador.

A máquina virtual, fornecida para desenvolvimento do projecto, já contém esta biblioteca.

Pacotes binários para instalação (openSUSE 13.2)

O manterial de apoio está disponível para instalação directa (não é necessário compilar) através do repositório (usar instalador favorito) [1] (escolher distribuição ou usar openSUSE 13.2, a oficial).

Máquina virtual

Está ainda disponível uma máquina virtual (baseada em openSUSE 13.2), que contém todo o material acima.