Código: | CC3001 | Sigla: | CC3001 | Nível: | 300 |
Áreas Científicas | |
---|---|
Classificação | Área Científica |
OFICIAL | Ciência de Computadores |
Ativa? | Sim |
Unidade Responsável: | Departamento de Ciência de Computadores |
Curso/CE Responsável: | Licenciatura em Ciência de Computadores |
Sigla | Nº de Estudantes | Plano de Estudos | Anos Curriculares | Créditos UCN | Créditos ECTS | Horas de Contacto | Horas Totais |
---|---|---|---|---|---|---|---|
L:CC | 28 | Plano de estudos a partir de 2014 | 3 | - | 6 | 56 | 162 |
MI:ERS | 43 | Plano Oficial desde ano letivo 2014 | 3 | - | 6 | 56 | 162 |
Compreensão e implementação de um compilador e interpretador de uma linguagem de programação.
Ser capaz de implementar um compilador para uma linguagem de programação simples.
Introdução ao processamento de linguagens de programaçao. Compiladores versus Interpretadores. Análise Léxica. Geradores automáticos de analisadores léxicos. Análise sintáctica (parsers LL, LR e LALR). Geradores de parsers. Sintaxe abstracta. Análise semântica: tabelas de símbolos, verificação de tipos. Registos de activação. Tradução para código intermédio. Geração de código: grafos de fluxo de dados, alocação de registos. Optimização de ciclos.
Aulas teóricas expositivas dos problemas e respectivas técnicas para os resolver. Construção de um compilador de uma linguagem protótipo para uma máquina virtual simples.
Designação | Peso (%) |
---|---|
Exame | 70,00 |
Trabalho laboratorial | 30,00 |
Total: | 100,00 |
0.3*nota do trabalho + 0.7*nota do exame
Trabalho Práctico de Compiladores
O trabalho pode ser em grupo de 2 ou individual e tem que ser enviado por email para amf@dcc.fc.up.pt com o Subject: TRABALHO COMPILADORES, até dia 16 de Dezembro. A avaliação pressupõe uma apresentação do trabalho que será feita nas aula práticas de 17 e 18 de Dezembro.
Implemente um subconjunto da linguagem de programação Julia (http://learnxinyminutes.com/docs/julia/ , http://julialang.org/ ) para MIPS. O subconjunto da linguagem deverá incluir:
- Inteiros
- Floats
- Booleanos
- Expressões aritméticas
- Expressões booleanas
- println
- Atribuições
- If then else
- Ciclos While
O compilador deverá:
1) Fazer análise sintáctica do programa em Julia construindo uma representação da árvore sintáctica (data do Haskell / struct em C / class C++) que será o input da tradução para código intermédio;
2) Traduzir essa estrutura para outra (data do Haskell, struct do C ou class do C++) que represente o programa em código intermédio de 3 endereços (http://en.wikipedia.org/wiki/Three_address_code).
3) A partir da estrutura que representa o código intermédio imprimir num ficheiro o código MIPS correspondente.