(→Análises Lexical e Sintáctica: Flex e Bison) |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{PRJHEADER}} |
− | |||
− | |||
{{TOCright}} | {{TOCright}} | ||
<!-- '''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>''' --> | <!-- '''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>''' --> | ||
Line 21: | Line 19: | ||
* análise lexical: gerador de analisadores lexicais: '''[https://github.com/westes/flex flex]''' versão 2.6.4 | * análise lexical: gerador de analisadores lexicais: '''[https://github.com/westes/flex flex]''' versão 2.6.4 | ||
− | * análise sintáctica: gerador de analisadores LALR(1): '''[https://www.gnu.org/software/bison/ bison]''' versão 3. | + | * análise sintáctica: gerador de analisadores LALR(1): '''[https://www.gnu.org/software/bison/ bison]''' versão 3.8.2 |
O código por elas produzido é, então, incorporado pela CDK no compilador em construção, sendo ligado automaticamente às restantes etapas. | O código por elas produzido é, então, incorporado pela CDK no compilador em construção, sendo ligado automaticamente às restantes etapas. |
AVISOS - Avaliação em Época Normal |
---|
Esclarecimento de dúvidas:
|
Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Compiladores):
|
Processo de avaliação (ver informação completa em Avaliação do Projecto):
|
Material de Uso Obrigatório |
---|
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório: |
|
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio. |
Uso Obrigatório: Repositório GIT |
Apenas se consideram para avaliação os projectos existentes no repositório GIT oficial. Apenas se considera para avaliação o ramo main.
Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho. |
O compilador, escrito em C++, realiza as seguintes etapas de análise para implementar a linguagem:
Depois de criado, o compilador pode ser obtido para gerar programas:
Estas duas etapas são realizadas pelas seguintes ferramentas:
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.
Estas duas etapas são realizadas pelas classes da biblioteca CDK, 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).
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 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 (ver também o manual da RTS).