Código: | EIC0028 | Sigla: | COMP |
Áreas Científicas | |
---|---|
Classificação | Área Científica |
OFICIAL | Programação |
Sigla | Nº de Estudantes | Plano de Estudos | Anos Curriculares | Créditos UCN | Créditos ECTS | Horas de Contacto | Horas Totais |
---|---|---|---|---|---|---|---|
MIEIC | 173 | Plano de estudos a partir de 2009/10 | 3 | - | 6 | 56 | 162 |
Fornecer os conceitos que permitam:
- compreender as fases de compilação de linguagens, em especial das linguagens imperativas e orientada por objectos;
- especificar a sintaxe e semântica de uma linguagem de programação;
- compreender e utilizar as estruturas de dados e os algoritmos principais usados na implementação de compiladores.
As competências adquiridas permitirão aos estudantes:
- desenvolver e implementar em software processadores de linguagens artificiais e de informação especificada textualmente segundo determinadas regras lexicais e sintácticas;
- conceber e implementar em software as várias etapas relacionadas com compiladores, nomeadamente:
- expressões regulares e autómatos finitos;
- analisadores sintácticos e semânticos;
- analisadores semânticos;
- optimizações de código;
- geradores de código para processadores ou para máquinas virtuais;
Linguagens de programação imperativas, orientadas por objetos.
Algoritmos e estruturas de dados.
Teoria da Computação.
- Introdução. Fases da compilação e estrutura típica de um compilador.
- Análise lexical. Expressões regulares e autómatos finitos.
- Análise sintáctica. Gramáticas. Implementação de analisadores sintácticos. Tratamento de erros.
- Análise semântica. Implementação de analisadores semânticos. Verificação de tipos.
- Ambientes de execução. Organização de memória e mecanismos para a passagem de parâmetros.
- Geração de código intermédio de baixo e de alto-nível.
- Alocação de registos.
- Técnicas de geração de código final e de optimização.
Aulas teóricas: exposição dos assuntos, acompanhada por exemplos e pela apresentação de pistas para resolução dos problemas das aulas práticas e do trabalho prático. Aulas teórico-práticas: resolução de problemas e discussão de questões relacionadas com o trabalho prático.
Designação | Peso (%) |
---|---|
Participação presencial | 0,00 |
Teste | 40,00 |
Trabalho laboratorial | 60,00 |
Total: | 100,00 |
Designação | Tempo (Horas) |
---|---|
Elaboração de projeto | 50,00 |
Estudo autónomo | 56,00 |
Frequência das aulas | 56,00 |
Total: | 162,00 |
Realização do trabalho prático com aproveitamento (nota igual ou superior a 50% da nota máxima do trabalho prático).
Não ultrapassar limite máximo (3) de faltas nas aulas TP
Nota final (todas as classificações de 0 a 20)
Obtenção de frequência:
Componentes que contribuem para a classificação (PRJ):
Durante a UC os estudantes elaboram um projeto que requer uma grande percentagem dos tópicos focados na UC. Têm existido duas opções de projetos:
(a) O desenvolvimento completo de um mini-compilador. Normalmente, o projeto requer as várias etapas de um compilador tendo como ponto de partida uma linguagem de programação simplificada para a qual é normalmente dada uma gramática abstrata em EBNF. O compilador envolve normalmente uma etapa de geração de bytecodes Java.
(b) O desenvolvimento de um tradutor ou de um processador/interpretador de linguagens. Neste caso os projetos envolvem a análise sintática de programas numa linguagem de entrada, a representação da mesma numa representação intermédia, e a geração do código na linguagem destino ou da interpretação utilizando essa representação intermédia.
Durante o semestre são realizados três pontos de verificação do trabalho realizado, das opções tomadas, e da distribuição e planeamento do trabalho a realizar pelos membros de cada grupo.
Realização das atividade de AD com aproveitamento (nota igual ou superior 10,0). O trabalho prático, devido à sua extensão, terá de ser realizado no decurso do semestre lectivo.
ÉPOCA NORMAL/ÉPOCA DE RECURSO:
- Exame (EX).
A classificação final é obtida como previamente estipulado na secção: "Cálculo da Classificação Final".
A classificação da componente distribuída (AD) não é susceptível de melhoria no ano lectivo em curso e conta para todas as épocas (normal e de recurso). A classificação obtida na componente relativa ao exame de época normal poderá ser melhorada através da realização do exame de recurso ou na ocorrência seguinte da UC. A classificação obtida na componente relativa ao exame de recurso poderá ser melhorada na ocorrência seguinte da UC.
Trabalho prático:
- Desenvolvimento das fases de análise léxica, análise sintática, análise semântica e geração de código de um compilador para uma linguagem imperativa simples.
- Este trabalho deverá ser realizado em grupos de no máximo 4 alunos.
Os exames são provas com consulta limitada.
Os estudantes que tenham obtido frequência no ano lectivo anterior (2019/2020) podem abdicar de uma nova classificação da componente distribuída (AD). Nesse caso, a nota AD obtida no ano lectivo anterior será utilizada nas fórmulas apresentadas para cálculo da nota final na disciplina e os pesos na nota final serão os do ano letivo anterior.