Material de Apoio ao Desenvolvimento do Projecto
O compilador, escrito em C++, realiza as seguintes etapas de análise para implementar a linguagem:
- análise lexical (gerador de analisadores lexicais GNU Flex 2.5.37);
- sintáctica (gerador de analisadores LALR(1) byacc-1.9);
- análise semântica e geração de código (CDK, RTS e extensões); e
- compilação de assembly (ferramenta yasm -- formato de teste: linux/elf32).
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório:
|
As ferramentas Flex e byacc 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.
O manterial de apoio está disponível para instalação directa (não é necessário compilar) através do repositório (usar instalador favorito) http://download.opensuse.org/repositories/home:/d4vid:/co14/ (escolher distribuição ou usar openSUSE 13.1, a oficial).
Está ainda disponível uma máquina virtual (baseada em openSUSE 13.1), que contém todo o material acima.
- compact-201402282135.tar.bz2
- libcdk9-201402282135.tar.bz2
- libcdk9-201404121543.tar.bz2
- librts3-201402282135.tar.bz2
- pf2asm-lite-201402282135.tar.bz2
Material de Apoio ao Desenvolvimento do Projecto
O compilador, escrito em C++, realiza as seguintes etapas de análise para implementar a linguagem:
- análise lexical (gerador de analisadores lexicais GNU Flex 2.5.37);
- sintáctica (gerador de analisadores LALR(1) byacc-1.9);
- análise semântica e geração de código (CDK, RTS e extensões); e
- compilação de assembly (ferramenta yasm -- formato de teste: linux/elf32).
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório:
|
As ferramentas Flex e byacc 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.
O manterial de apoio está disponível para instalação directa (não é necessário compilar) através do repositório (usar instalador favorito) http://download.opensuse.org/repositories/home:/d4vid:/co14/ (escolher distribuição ou usar openSUSE 13.1, a oficial).
Está ainda disponível uma máquina virtual (baseada em openSUSE 13.1), que contém todo o material acima.
- compact-201402282135.tar.bz2
- libcdk9-201402282135.tar.bz2
- libcdk9-201404121543.tar.bz2
- librts3-201402282135.tar.bz2
- pf2asm-lite-201402282135.tar.bz2
- compact-201402282135.tar.bz2
- libcdk9-201402282135.tar.bz2
- libcdk9-201404121543.tar.bz2
- librts3-201402282135.tar.bz2
- pf2asm-lite-201402282135.tar.bz2
Compiladores exemplo: Compact e Simple
Os compiladores Compact e Simple exemplificam a utilização das bibliotecas de apoio. Estes compiladores suportam expressões básicas com inteiros, permitem apresentá-los na saída e permitem obtê-los a partir do utilizador. Permitem ainda a apresentação de cadeias de caracteres. Em Compact, as cadeias de caracteres não podem ser utilizadas em expressões (esta restrição não existem em Simple; ver abaixo).
Apesar de permitirem estruturas de controlo, tais como ciclos while e instruções if-then-else, não permitem a definição de funções e todas as variáveis são obrigatoriamente inteiras e globais.
O compilador Compact não tem necessidade de verificação de tipos, pois não é possível misturar tipos, pelo que esse código não está presente. Esta opção, embora funcional, não é a mais elegante/flexível e foi removida no compilador Simple, que tem, assim, necessidade de verificar a coerências dos operadores e dos seus operandos relativamente aos tipos.
Ambos os compiladores fazem uma gestão básica da utilização de variáveis declaradas (i.e., declara-as na primeira atribuição).
Note-se que em Compact a atribuição é uma operação e não uma expressão. Em Simple, a atribuição é uma expressão e as noções de left-value e right-value estão definidas de forma mais elegante.
O código do compilador Compact pode ser obtido aqui:
- Compact: compact-201402282135.tar.bz2
O código do compilador Simple pode ser obtido aqui (o target para LLVM-IR será oportunamente disponibilizado):
- Simple: simple-201405052126.tar.bz2
Compilador exemplo: pf2asm
O compilador pf2asm permite escrever e compilar directamente código Postfix. É também um exemplo de uso do material de apoio. Este compilador é de utilização opcional (é independente da realização do projecto), mas pode ser útil para a realização de testes de protótipos de geração de código Postfix.
Este compilador pode ser obtido aqui:
- pf2asm (lite) pf2asm-lite-201402282135.tar.bz2
O manual de referência da linguagem Postfix pode ser encontrado no wiki: http://goo.gl/kQCXkH
Pacotes de Testes
Pacotes de testes para a linguagem do projecto:
- Testes simples (14 programas simples): tests-simple-1-201403161958.tar.bz2
- Finais (conjunto parcial -- testes diários): tests-daily-201405131137.tar.bz2
- Finais (conjunto completo -- versão de avaliação): tests-final-201405212019.tar.bz2
Os resultados da execução dos vários testes estão disponíveis nos seguintes locais:
- Testes diários - http://goo.gl/6kTi29 (actualizados continuamente)
- Entrega "zero" - http://goo.gl/Ts7iW9
- Entrega intermédia - http://goo.gl/sSn9yJ
- Entrega final - http://goo.gl/x6Ancf