Difference between revisions of "Compiladores/Projecto de Compiladores/Compiladores Exemplo"

From Wiki**3

< Compiladores‎ | Projecto de Compiladores
(Compilador "Simple")
(Compilador "Simple")
Line 17: Line 17:
 
O código do compilador Simple pode ser obtido aqui:
 
O código do compilador Simple pode ser obtido aqui:
  
* Simple: [[media:simple-201902132207.tar.bz2]]
+
* Simple: [[media:simple-201902132207.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.
 
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 do compilador Simple num ambiente que não o recomendado requer a pré-instalação dos pacotes relativos ao LLVM. O ambiente recomendado já contém todas as dependências necessárias.}}
+
{{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.}}
  
 
=== Compilador "Compact" (descontinuado -- utilizar o "Simple") ===
 
=== Compilador "Compact" (descontinuado -- utilizar o "Simple") ===

Revision as of 09:37, 22 February 2019

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: 2019/03/22 17:00 (inicial); 2019/04/12 17:00 (intercalar); 2019/05/24 17:00 (final); 2019/05/27-2019/05/31 (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 '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.
  • 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.

Compiladores "Simple" e "Compact" (descontinuado)

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

Compilador "Simple"

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.

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.

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.

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.