Código: | CC3001 | Sigla: | CC3001 | Nível: | 300 |
Áreas Científicas | |
---|---|
Classificação | Área Científica |
OFICIAL | Ciência de Computadores |
Ativa? | Sim |
Página Web: | http://www.dcc.fc.up.pt/~pbv/aulas/compiladores |
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:B | 0 | Plano de Estudos Oficial | 3 | - | 6 | 48 | 162 |
L:CC | 68 | Plano estudos a partir do ano letivo 2021/22 | 3 | - | 6 | 48 | 162 |
L:F | 3 | Plano de Estudos Oficial | 2 | - | 6 | 48 | 162 |
3 | |||||||
L:G | 0 | Plano estudos a partir do ano letivo 2017/18 | 2 | - | 6 | 48 | 162 |
3 | |||||||
L:M | 0 | Plano de Estudos Oficial | 2 | - | 6 | 48 | 162 |
3 | |||||||
L:Q | 0 | Plano estudos a partir do ano letivo 2016/17 | 3 | - | 6 | 48 | 162 |
Estudo e implementação dos conceitos e técnicas usados para a construção de compiladores e interpretadores de linguagens de programação imperativas.
No final desta UC os estudantes deverão ser capazes de:
1) Conhecer a decomposição em fases de um compilador: análise léxica, análise sintática, análise semântica, geração de código intermédio e geração de código de máquina
2) Compreender os conceitos de sintaxe concreta e abstrata e linguagem intermédia
3) Implementar um compilador para uma pequena linguagem imperativa estruturado seguindo as fases do ponto 1)
Conhecimentos básicos em programação imperativa e funcional.
Conhecimento básico de linguagem assembly (MIPS).
Modelos de computação (expressões regulares, automatos finitos e gramáticas livres de contexto).
Introdução ao processamento de linguagens de programaçao. Compiladores versus Interpretadores. Análise Léxica. Geradores automáticos de analisadores léxicos. Sintaxe abstracta. Análise sintáctica usando técnicas LL, LR e LALR. Geradores de analisadores sintáticos (parsers). 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: grafo de controlo de fluxo de dados, alocação de registos.
Aulas teóricas presenciais com exposição de conceitos suportada por projeção de slides e demonstração interativa.
Aulas laboratoriais presenciais com resolução de exercícios propostos e acompanhamento do projeto prático.
Projecto prático para grupos de 2 estudantes: construção de um compilador de uma pequena linguagem imperativa.
Utilização do GitHub Classroom para colaboração à distância entre estudantes e gestão dos projetos.
Designação | Peso (%) |
---|---|
Exame | 60,00 |
Trabalho laboratorial | 10,00 |
Trabalho prático ou de projeto | 30,00 |
Total: | 100,00 |
Designação | Tempo (Horas) |
---|---|
Elaboração de projeto | 68,00 |
Estudo autónomo | 50,00 |
Frequência das aulas | 14,00 |
Trabalho laboratorial | 28,00 |
Total: | 160,00 |
Classificação final = 10%*W + 15%*P1 + 15%*P2 + 60%*E
onde:
W : Resolução dos exercícios semanais das aulas laboratoriais
P1 : Classificação da 1º fase do projeto laboratorial
P2 : Classificação da 2º fase do projeto laboratorial
E : Classificação no exame
Para obter aprovação, o estudante deverá atingir classificação mínima de 40% na componente de exame.