(→Compilador GR8) |
|||
Line 1: | Line 1: | ||
− | {{ | + | {{PRJCompiladoreAvisosEN20202021}} |
− | <!--{{ | + | <!--{{PRJCompiladoreAvisosEE20202021}}--> |
− | {{ | + | {{PRJCOMandatory20202021}} |
{{TOCright}} | {{TOCright}} | ||
<!--'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''--> | <!--'''<font color="red">A DISPONIBILIZAR BREVEMENTE</font>'''--> | ||
Line 15: | Line 15: | ||
O código do compilador Simple pode ser obtido aqui: | O código do compilador Simple pode ser obtido aqui: | ||
− | * Simple: [[media:simple- | + | * Simple: [[media:simple-202102202020.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. | ||
Line 27: | Line 27: | ||
Este compilador pode ser obtido aqui: | Este compilador pode ser obtido aqui: | ||
− | * pf2asm: [[media:pf2asm- | + | * pf2asm: [[media:pf2asm-202102202020.tar.bz2]] |
{{Suggestion|Aconselha-se a consulta do [[Postfix Reference Guide|manual de referência da linguagem Postfix]].}} | {{Suggestion|Aconselha-se a consulta do [[Postfix Reference Guide|manual de referência da linguagem Postfix]].}} | ||
− | == Compilador GR8 == | + | == Compilador Og (2019-2020) com CDK15 == |
+ | |||
+ | O compilador Og foi desenvolvido em 2020 sobre a CDK15, continuando dependente dela. 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 e suporte para novas versões da CDK. Note-se que a CDK15 tinha algumas especificidades que foram removidas de versões subsequentes. '''Recorda-se que em 2020-2021 é obrigatório o uso da CDK16'''. Tal como o projecto da linguagem FIR, Og usa a RTS5. <!--Esta implementação de Og é ainda dependente da RTS4. '''Recorda-se que em 2019-2020 é obrigatório o uso da RTS5'''. --> | ||
+ | |||
+ | * [[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-202102202020.tar.bz2]] | ||
+ | * CDK15 - "Compiler Development Kit" [[media:libcdk15-202004101316.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. '''Recorda-se que em 2019-2020 é obrigatório o uso da CDK15'''. Esta implementação de GR8 é ainda dependente da RTS4. '''Recorda-se que em 2019-2020 é obrigatório o uso da RTS5'''. | 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. '''Recorda-se que em 2019-2020 é obrigatório o uso da CDK15'''. Esta implementação de GR8 é ainda dependente da RTS4. '''Recorda-se que em 2019-2020 é obrigatório o uso da RTS5'''. |
[Expand] AVISOS - Avaliação em Época Normal |
---|
[Expand] Material de Uso Obrigatório |
---|
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.
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:
O compilador Og foi desenvolvido em 2020 sobre a CDK15, continuando dependente dela. 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 e suporte para novas versões da CDK. Note-se que a CDK15 tinha algumas especificidades que foram removidas de versões subsequentes. Recorda-se que em 2020-2021 é obrigatório o uso da CDK16. Tal como o projecto da linguagem FIR, Og usa a RTS5.
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. Recorda-se que em 2019-2020 é obrigatório o uso da CDK15. Esta implementação de GR8 é ainda dependente da RTS4. Recorda-se que em 2019-2020 é obrigatório o uso da RTS5.
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.