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: 2018/2019 - 2S Ícone do Moodle

Ativa? Sim
Página Web: https://moodle.up.pt/course/view.php?id=1034
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 164 Plano de estudos a partir de 2009/10 3 - 6 56 162

Língua de trabalho

Português - Suitable for English-speaking students

Objetivos

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.

Resultados de aprendizagem e competências

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;

Modo de trabalho

Presencial

Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)

Linguagens de programação imperativas, orientadas por objetos.

Algoritmos e estruturas de dados.

Teoria da Computação.

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.

- Alocação de registos.

- Técnicas de geração de código final e de optimização.

Bibliografia Obrigatória

Appel, Andrew Wilson; Modern Compiler Implementation in Java, Cambridge University Press, 2002. ISBN: ISBN 0-521-82060-X
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)
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
Pedro Reis Santos, Thinault Langlois; Compiladores - da Teoria à Prática, FCA, 2014. ISBN: 978-972-722-768-6

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

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

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

Designação Peso (%)
Participação presencial 0,00
Teste 40,00
Trabalho laboratorial 60,00
Total: 100,00

Componentes de Ocupação

Designação Tempo (Horas)
Elaboração de projeto 50,00
Estudo autónomo 56,00
Frequência das aulas 56,00
Total: 162,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).
Não ultrapassar limite máximo (3) de faltas nas aulas TP

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

ÉPOCA NORMAL:

Nota final = ROUND(0,60*AD + 0,2*T1 + 0,2*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 e um máximo de 3 faltas nas aulas TP), se obtiver uma nota individual de cada teste (T1 e T2) igual ou superior a 7 valores, uma nota média nos testes (T1 e T2) igual ou superior a 8 valores, e se obtiver Nota final igual ou superior a 10 valores.

ÉPOCA DE RECURSO:

Nota final = ROUND(0,60*AD + 0,40*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 de recurso se obtiver frequência (i.e., AD >=10 e um máximo de 3 faltas nas aulas TP), se obtiver uma nota no exame (EX) igual ou superior a 8 valores, e se obtiver Nota final igual ou superior a 10 valores.

Trabalho de estágio/projeto

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 dois 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.

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

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

Os estudantes que tenham obtido frequência no ano lectivo anterior (2017/2018) 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-10-31 às 22:01:20 | Política de Utilização Aceitável | Política de Proteção de Dados Pessoais | Denúncias