Compiladores/Projecto de Compiladores/Compiladores Exemplo: Difference between revisions

From Wiki**3

Root (talk | contribs)
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..."
 
Root (talk | contribs)
 
(86 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{PRJHEADER}}
{{TOCright}}
{{TOCright}}
== Compiladores "Simple" e "Compact" ==
<!--'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''-->


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).
== Compilador "Simple" ==


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 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.


Ambos os compiladores fazem uma gestão básica da utilização de variáveis declaradas (i.e., são declaradas na primeira atribuição).
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.


=== Compilador "Simple" ===
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: [[file:simple-201502141815.tar.bz2]]
* Simple: [[media:simple-202408310000.tar.bz2]] <!--(esta versão não inclui suporte para LLVM)-->


=== Compilador "Compact" (obsoleto -- utilizar o "Simple") ===
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 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.
== 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]]


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.
== Compilador Og (2019-2020) com CDK19 (2024) ==


O código do compilador Compact pode ser obtido aqui:
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'''.


* Compact: [[file:compact-201502141815.tar.bz2]]
* [[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 "pf2asm" ==
== 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.'''


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.
* [[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]]


Este compilador pode ser obtido aqui:
== Compilador "Compact" (descontinuado -- utilizar o "Simple") ==


* pf2asm: [[file:pf2asm-201502141815.tar.bz2]]
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.


Aconselha-se a consulta do manual de referência da linguagem Postfix: [[Postfix Reference Guide]].
{{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:

  • Consultar sempre o corpo docente atempadamente: presencialmente ou através do endereço oficial da disciplina [1].
  • Não utilizar fontes de informação não oficialmente associadas ao corpo docente (podem colocar em causa a aprovação à disciplina).
  • Não são aceites justificações para violações destes conselhos: quaisquer consequências nefastas são da responsabilidade do aluno.

Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Compiladores):

  • O material de apoio é de uso obrigatório e não pode ser alterado.
  • Verificar atempadamente (mínimo de 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.

Processo de avaliação (ver informação completa em Avaliação do Projecto):

  • Datas: 2025/05/16 17:00 (inicial); 2025/05/30 17:00 (intercalar); 2025/06/12 17:00 (final); 2025/06/12-2025/06/16 (teste prático).
  • Todas as entregas são cruciais para o bom desenvolvimento do projecto, sendo obrigatórias: a não realização de uma entrega implica a exclusão da avaliação do projecto e, por consequência, da avaliação da disciplina.
  • Verificar atempadamente (até 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de avaliação, incluindo a capacidade de acesso ao repositório.
  • Apenas se consideram para avaliação os projectos existentes no repositório oficial. Apenas se considera para avaliação o ramo 'master'.
  • 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.
  • A avaliação do projecto pressupõe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de avaliação.
  • Fraudes na execução do projecto terão como resultado a exclusão dos alunos implicados do processo de avaliação em curso.
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:

Aconselha-se a consulta do 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.

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.

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.

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.

O código do compilador Compact já não se encontra disponível a partir da CDK12.