Compiladores/Projecto de Compiladores/Compiladores Exemplo: Difference between revisions
From Wiki**3
Created page with "{{TOCright}} == Compiladores "Simple" e "Compact" == Os compiladores Compact e Simple exemplificam a utilização das bibliotecas de apoio. Estes compiladores suportam expres..." |
|||
| (86 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{PRJHEADER}} | |||
{{TOCright}} | {{TOCright}} | ||
= | <!--'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''--> | ||
== Compilador "Simple" == | |||
O compilador Simple exemplifica a utilização das bibliotecas de apoio. Este compilador suporta expressões básicas com inteiros, permite apresentá-los na saída e permite obtê-los a partir do utilizador. Permite ainda a apresentação de cadeias de caracteres. | |||
Apesar de permitir estruturas de controlo, tais como ciclos '''while''' e instruções '''if-then-else''', não permite a definição de funções e todas as variáveis são obrigatoriamente inteiras e globais. | |||
O compilador faz uma gestão básica da utilização de variáveis declaradas (i.e., são declaradas na primeira atribuição). | |||
O código do compilador Simple pode ser obtido aqui: | O código do compilador Simple pode ser obtido aqui: | ||
* Simple: [[ | * Simple: [[media:simple-202408310000.tar.bz2]] <!--(esta versão não inclui suporte para LLVM)--> | ||
A definição da linguagem Simple pode ser obtida por inspecção do código, especialmente estudando o léxico e a gramática. | |||
<!-- | |||
{{Aviso|Note-se que a compilação de algumas versões do compilador Simple num ambiente que não o recomendado pode requerer a pré-instalação dos pacotes relativos ao LLVM. O ambiente recomendado já contém todas as dependências necessárias.}}--> | |||
O compilador | == Compilador "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: [[media:pf2asm-202408310000.tar.bz2]] | |||
{{Suggestion|Aconselha-se a consulta do [[Postfix Reference Guide|manual de referência da linguagem Postfix]].}} | |||
== Compilador TIL (2023-2024) com CDK19 (2024) == | |||
O compilador TIL foi originalmente desenvolvido em 2024 sobre a CDK19. A implementação pode conter alguns erros e é da responsabilidade dos alunos não copiar código com defeitos. Deixa-se como exercício a adaptação deste compilador para novas características. TIL usa a RTS5. '''Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6'''. | |||
* [[Compiladores/Projecto de Compiladores/Projecto 2023-2024/Manual de Referência da Linguagem TIL|Especificação da linguagem TIL]] | |||
* TIL - implementação [[media:til-202505151625.tar.bz2]] | |||
* CDK19 - "Compiler Development Kit" [[media:libcdk19-202403010000.tar.bz2]] | |||
* RTS5 - "Run Time System" [[media:librts5-202103031636.tar.bz2]] | |||
== Compilador Og (2019-2020) com CDK19 (2024) == | |||
O | O compilador Og foi originalmente desenvolvido em 2020 sobre a CDK15, mas foi entretanto actualizado para a CDK19 (alterações de pormenor no sistema de tipos). A implementação está incompleta em algumas partes e pode conter alguns erros. Deixa-se como exercício a adaptação deste compilador para novas características. Note-se que a CDK15 tinha algumas especificidades que foram removidas de versões subsequentes. Og usa a RTS5. '''Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6'''. | ||
* | * [[Compiladores/Projecto de Compiladores/Projecto 2019-2020/Manual de Referência da Linguagem Og|Especificação da linguagem Og]] | ||
* Og - implementação (incompleta) [[media:og-202407150000.tar.bz2]] | |||
* CDK19 - "Compiler Development Kit" [[media:libcdk19-202403010000.tar.bz2]] | |||
* RTS5 - "Run Time System" [[media:librts5-202103031636.tar.bz2]] | |||
== Compilador | == Compilador GR8 (2017-2018) com CDK13 == | ||
O compilador GR8 foi desenvolvido em 2018 sobre a CDK13, continuando dependente dela. A implementação está incompleta em algumas partes e foram introduzidos alguns erros subtis no código (por forma a potenciar a aprendizagem do seu tratamento). Deixa-se como exercício a adaptação deste compilador para novas características e suporte para novas versões da CDK. Note-se que a CDK13 tinha algumas especificidades que foram removidas de versões subsequentes. Esta implementação de GR8 é ainda dependente da RTS4. '''Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6.''' | |||
* [[Compiladores/Projecto de Compiladores/Projecto 2017-2018/Manual de Referência da Linguagem GR8|Especificação da linguagem GR8]] | |||
* GR8 - implementação (incompleta) [[media:gr8-201903091158.tar.bz2]] | |||
* CDK13 - "Compiler Development Kit" [[media:libcdk13-201802181144.tar.bz2]] | |||
* RTS4 - "Run Time System" [[media:librts4-201602111900.tar.bz2]] | |||
== Compilador "Compact" (descontinuado -- utilizar o "Simple") == | |||
O compilador Compact suportava uma versão primitiva da linguagem Simple, em que não havia necessidade de verificação de tipos, pois não era possível misturá-los. Esta opção, embora funcional, não é a mais elegante/flexível e foi removida no compilador Simple. Como consequência, em Simple é necessário verificar a coerência dos operadores e dos seus operandos relativamente aos tipos. Além disso, em Compact a atribuição era 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. | |||
{{Aviso|O código do compilador Compact já não se encontra disponível a partir da CDK12.}} | |||
[[category:Projecto de Compiladores]] | [[category:Projecto de Compiladores]] | ||
[[category:Compiladores]] | [[category:Compiladores]] | ||
[[category:Ensino]] | [[category:Ensino]] | ||
Latest revision as of 15:44, 15 May 2025
| 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. |
Compilador "Simple"
O compilador Simple exemplifica a utilização das bibliotecas de apoio. Este compilador suporta expressões básicas com inteiros, permite apresentá-los na saída e permite obtê-los a partir do utilizador. Permite ainda a apresentação de cadeias de caracteres.
Apesar de permitir estruturas de controlo, tais como ciclos while e instruções if-then-else, não permite a definição de funções e todas as variáveis são obrigatoriamente inteiras e globais.
O compilador faz uma gestão básica da utilização de variáveis declaradas (i.e., são declaradas na primeira atribuição).
O código do compilador Simple pode ser obtido aqui:
A definição da linguagem Simple pode ser obtida por inspecção do código, especialmente estudando o léxico e a gramática.
Compilador "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:
Compilador TIL (2023-2024) com CDK19 (2024)
O compilador TIL foi originalmente desenvolvido em 2024 sobre a CDK19. A implementação pode conter alguns erros e é da responsabilidade dos alunos não copiar código com defeitos. Deixa-se como exercício a adaptação deste compilador para novas características. TIL usa a RTS5. Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6.
- Especificação da linguagem TIL
- TIL - implementação media:til-202505151625.tar.bz2
- CDK19 - "Compiler Development Kit" media:libcdk19-202403010000.tar.bz2
- RTS5 - "Run Time System" media:librts5-202103031636.tar.bz2
Compilador Og (2019-2020) com CDK19 (2024)
O compilador Og foi originalmente desenvolvido em 2020 sobre a CDK15, mas foi entretanto actualizado para a CDK19 (alterações de pormenor no sistema de tipos). A implementação está incompleta em algumas partes e pode conter alguns erros. Deixa-se como exercício a adaptação deste compilador para novas características. Note-se que a CDK15 tinha algumas especificidades que foram removidas de versões subsequentes. Og usa a RTS5. Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6.
- Especificação da linguagem Og
- Og - implementação (incompleta) media:og-202407150000.tar.bz2
- CDK19 - "Compiler Development Kit" media:libcdk19-202403010000.tar.bz2
- RTS5 - "Run Time System" media:librts5-202103031636.tar.bz2
Compilador GR8 (2017-2018) com CDK13
O compilador GR8 foi desenvolvido em 2018 sobre a CDK13, continuando dependente dela. A implementação está incompleta em algumas partes e foram introduzidos alguns erros subtis no código (por forma a potenciar a aprendizagem do seu tratamento). Deixa-se como exercício a adaptação deste compilador para novas características e suporte para novas versões da CDK. Note-se que a CDK13 tinha algumas especificidades que foram removidas de versões subsequentes. Esta implementação de GR8 é ainda dependente da RTS4. Recorda-se que em 2024-2025 é obrigatório o uso da CDK20 e da RTS6.
- Especificação da linguagem GR8
- GR8 - implementação (incompleta) media:gr8-201903091158.tar.bz2
- CDK13 - "Compiler Development Kit" media:libcdk13-201802181144.tar.bz2
- RTS4 - "Run Time System" media:librts4-201602111900.tar.bz2
Compilador "Compact" (descontinuado -- utilizar o "Simple")
O compilador Compact suportava uma versão primitiva da linguagem Simple, em que não havia necessidade de verificação de tipos, pois não era possível misturá-los. Esta opção, embora funcional, não é a mais elegante/flexível e foi removida no compilador Simple. Como consequência, em Simple é necessário verificar a coerência dos operadores e dos seus operandos relativamente aos tipos. Além disso, em Compact a atribuição era 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.