Saltar para:
Logótipo
Você está em: Início > EIC0028

Compiladores

Código: EIC0028     Sigla: COMP

Áreas Científicas
Classificação Área Científica
OFICIAL Programação

Ocorrência: 2011/2012 - 2S

Ativa? Sim
Página Web: https://moodle.fe.up.pt/1112/course/view.php?id=2860
Unidade Responsável: Departamento de Engenharia Informática
Curso/CE Responsável: Mestrado Integrado em Engenharia Informática e Computação

Ciclos de Estudo/Cursos

Sigla Nº de Estudantes Plano de Estudos Anos Curriculares Créditos UCN Créditos ECTS Horas de Contacto Horas Totais
MIEIC 145 Plano de estudos a partir de 2009/10 3 - 6 56 162

Língua de trabalho

Português - Suitable for English-speaking students

Objetivos

1- ENQUADRAMENTO
A unidade curricular de compiladores foca os conhecimentos científicos e técnicas necessários para implementar processadores de linguagens artificiais, incidindo nas linguagens de programação imperativas e nas linguagens de programação orientadas por objetos. Esta unidade curricular vem em seguimento da unidade curricular de Teoria da Computação, que inclui como conteúdo programático as linguagens regulares, as linguagens e gramáticas livres de contexto, e a utilização de autómatos para implementar reconhecedores de linguagens. É uma unidade curricular que exige aos estudantes a utilização de diversas estrututuras de dados (árvores, grafos, tabelas de símbolos, etc.), de diversos algoritmos (para coloração de grafos, por exemplo), e a oportunidade de lidarem com repositórios de teste e com um projecto de alguma envergadura.

2- OBJETIVOS ESPECÍFICOS
Fornecer os conceitos que permitam:
(1) compreender as fases de compilação de linguagens, em especial das linguagens imperativas e orientada por objectos;
(2) especificar a sintaxe e semântica de uma linguagem de programação;
(3) compreender e utilizar as estruturas de dados e os algoritmos principais usados na implementação de compiladores.

3- CONHECIMENTO PRÉVIO
Linguagens de programação imperativas, orientadas por objetos.
Algoritmos e estruturas de dados.
Teoria da Computação.

4- DISTRIBUIÇÃO PERCENTUAL
Componente Científica: 70% Componente Tecnológica 30%

5- RESULTADOS DA APRENDIZAGEM
As competências adquiridas permitirão aos estudantes:
(1) desenvolver e implementar em software processadores de linguagens artificiais e de informação especificada textualmente segundo determinadas regras lexicais e sintácticas;
(2) 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.

Programa

- 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.
- Técnicas de geração de código final e de optimização.

Bibliografia Obrigatória

A. Aho, M. Lam, R. Sethi, J. Ullman; Compilers: Principles, Techniques, and Tools, 2nd Edition, Addison Wesley, 2007. ISBN: 0321486811 (Existe 1.a edição (1986) na biblioteca)
Appel, Andrew Wilson; Modern Compiler Implementation in Java, Cambridge University Press, 2002. ISBN: ISBN 0-521-82060-X
Alfred V. Aho... [et al.]; Compilers. ISBN: 0-321-49169-6

Bibliografia Complementar

Cooper, Keith D.; Engineering a compiler. ISBN: 1-55860-699-8
Terence Parr; The Definitive ANTLR Reference - Building Domain Specific Languages, The Pragmatic Bookshelf, 2007. ISBN: 978-09787392-4-9
Louden, Kenneth C.; Compiler construction. ISBN: 0-534-93972-4
Muchnick, Steven; Advanced Compiler Design and Implementation, Morgan Kaufman Publishers, 1997. ISBN: ISBN 1-55860-320-4

Métodos de ensino e atividades de aprendizagem

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.

Software

COINS, http://www.coins-project.org/international/
JavaCC, https://javacc.dev.java.net/
JASMIN, http://jasmin.sourceforge.net/.
ANTLR - Another Tool for Language Recognition
NetBeans 6

Palavras Chave

Ciências Tecnológicas > Tecnologia > Tecnologia de computadores > Tecnologia de software

Tipo de avaliação

Avaliação distribuída sem exame final

Componentes de Avaliação

Descrição Tipo Tempo (Horas) Peso (%) Data Conclusão
Participação presencial (estimativa) Participação presencial 55,00
Realização do trabalho prático Defesa pública de dissertação, de relatório de projeto ou estágio, ou de tese 45,00
Exames escritos Exame 3,00
Estudo para os Exames Exame 12,00
Total: - 0,00

Componentes de Ocupação

Descrição Tipo Tempo (Horas) Data Conclusão
Estudo Semanal Estudo autónomo 50
Total: 50,00

Obtenção de frequência

Realização do trabalho prático com aproveitamento (nota igual ou superior a 50% da nota máxima do trabalho prático).

Fórmula de cálculo da classificação final

ÉPOCA NORMAL:
Nota final = ROUND(0,70*AD + 0,15*T1 + 0,15*T2)
- AD: nota da avaliação distribuída (trabalho prático) [0..20]
- T1: nota no primeiro teste [0..20]
- T2: nota no segundo teste [0..20]
O aluno obtém aproveitamento na disciplina na época normal se obtiver frequência (i.e., AD >=10), se obtiver uma nota média nos testes (T1 e T2) igual ou superior a 8 valores, e se obtiver Nota final superior ou igual a 10 valores.

ÉPOCA DE RECURSO:
Nota final = ROUND(0,70*AD + 0,30*EX)
- AD: nota da avaliação distribuída (trabalho prático) [0..20]
- EX: nota no exame de recurso [0..20]
O aluno obtém aproveitamento na disciplina na época normal se obtiver frequência (i.e., AD >=10), se obtiver uma nota no exame (EX) igual ou superior a 8 valores, e se obtiver Nota final superior ou igual a 10 valores.

Avaliação especial (TE, DA, ...)

- Realização do trabalho prático com aproveitamento (nota igual ou superior a 50% da nota máxima do trabalho prático). O trabalho prático, devido à sua extensão, terá de ser realizado no decurso do semestre lectivo.

ÉPOCA NORMAL:
- Testes T1 e T2.

ÉPOCA DE RECURSO:
- Exame de recurso (EX).

A classificação final é obtida como previamente estipulado na secção: "Cálculo da Classificação Final".

Melhoria de classificação

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 aos dois testes efectuados (T1 e T2) poderá ser melhorada através da realização do exame de recurso (EX) ou na ocorrência seguinte da UC.

A classificação obtida na componente relativa ao exame de recurso (EX) poderá ser melhorada na ocorrência seguinte da UC.

Observações

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 2 alunos.

Os testes (T1 e T2) e o exame de recurso (EX) são provas com consulta.

Os estudantes que tenham obtido frequência no ano lectivo anterior (2008/2009) 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.
Recomendar Página Voltar ao Topo
Copyright 1996-2024 © Faculdade de Engenharia da Universidade do Porto  I Termos e Condições  I Acessibilidade  I Índice A-Z  I Livro de Visitas
Página gerada em: 2024-07-22 às 22:22:57 | Política de Utilização Aceitável | Política de Proteção de Dados Pessoais | Denúncias