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

Ativa? Sim
Página Web: https://teams.microsoft.com/l/team/19%3a863496861fd04b7a869f33ed7e8cb752%40thread.tacv2/conversations?groupId=1d256bf6-e8f7-46fa-89e0-c21504d6f8e0&tenantId=b7821bc8-67cc-447b-b579-82f7854174fc
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 173 Plano de estudos a partir de 2009/10 3 - 6 56 162
Mais informaçõesA ficha foi alterada no dia 2021-02-12.

Campos alterados: Fórmula de cálculo da classificação final, Avaliação especial, Melhoria de classificação, Modo de trabalho, Trabalho de estágio/projeto, Observações, URL da página, Tipo de avaliação

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

B-learning

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 com 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

Nota final (todas as classificações de 0 a 20)

  • AD: avaliação distribuída constituida por (minímo de 10,0 valores)
    •  LHA: participação nas actividades das aulas teóricas e nos trabalhos de casa: 15%
    •  PRJ: Projecto do compilador: 70%
    • CA: Desafios (2 desafios durante o semestre): 15%
    • AD = 0.15 x LHA + 0.70 x PRJ + 0.15 x CA
  • FEG: nota no exame de “Época Normal” ou de “Época de Recurso” superior or igual a 8,0 valores
  • Nota de AD (ADG) =
    • AD if AD <= FEG+3
    • FEG+3, otherwise
  • Nota final = arredondada(0,70 x ADG + 0,30 x FEG)

Obtenção de frequência:

  • Nota de AD >=10,0 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.
  • Distributed evaluation (AD) not inferior to 10.0 marks and a maximum of 3 non-justified absences (25%) on the lab (TP) classes

Componentes que contribuem para a classificação (PRJ):

  • Primeiro ponto de verificação: 5%
  • Segundo ponto de verificação: 10%
  • Terceiro ponto de verificação: 10%
  • Trabalho final: 55%
  • apresentação/discussão do trabalho: 20%

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

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

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

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

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

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-11-09 às 05:14:00 | Política de Utilização Aceitável | Política de Proteção de Dados Pessoais | Denúncias