Disciplina

Área

Área Científica de Metodologia e Tecnologias da Programação > Linguagens de Programação

Activa nos planos curriculares

LEIC-T 2021 > LEIC-T 2021 > 1º Ciclo > Área Principal > Compiladores

LEIC-A 2021 > LEIC-A 2021 > 1º Ciclo > Área Principal > Compiladores

MEEC 2006 > MEEC 2006 > 2º Ciclo > Área de Especialização > Área de Especialização Secundária > Computadores > Metodologia e Tecnologia da Programação > Compiladores

LEIC-T 2006 > LEIC-T 2006 > 1º Ciclo > Ciências da Engenharia Informática > Compiladores

LEIC-A 2006 > LEIC-A 2006 > 1º Ciclo > Ciências da Engenharia Informática > Compiladores

Nível

Projeto: 50%, com nota mínima de 9,5 valores, realizado em 3 entregas (inicial, intermédia e final) com teste prático final individual. Exercícios de laboratório: 50%, com nota mínima de 9,5 valores. O processo de avaliação é o mesmo para todos os alunos, incluindo trabalhadores-estudantes. Em época especial os exercícios de laboratório são substituídos por um exame de 180min.

Tipo

Não Estruturante

Regime

Semestral

Carga Horária

1º Semestre

2.0 h/semana

1.5 h/semana

119.0 h/semestre

Objectivos

Aquisição de conceitos sobre a definição de linguagens de programação.Obtenção de conhecimentos sobre os métodos de análise (front-end) e síntese (back-end) mais usados pelos compiladores. Especificação lexical e sintáctica, bem como a análise semântica das linguagens de computação, com especial ênfase nas linguagens de programação. Desenvolver um compilador para uma linguagem de programação simples que gere código máquina executável.

Programa

Unix programming environment: gcc, gdb, cvs, make, lex and yacc tools. Regular languages and lexical analysis: modeling sentence recognition with finite automata (non-deterministic and deterministic). Context free languages: context free grammars, derivation trees, stack finite automata, descendent parsers LL(1) and bottom-up parsers LR(0)/ SLR(1) / LALR(1). Attribute grammars and attribute evaluation. Error treatment and recovery, semantic analysis. Intermediate code generation of abstract trees and postfix code. Topics of final code generation and optimization for "load and store" machines.

Metodologia de avaliação

Projeto: 50%, com nota mínima de 9,5 valores, realizado em 3 entregas (inicial, intermédia e final) com teste prático final individual. Exercícios de laboratório: 50%, com nota mínima de 9,5 valores. O processo de avaliação é o mesmo para todos os alunos, incluindo trabalhadores-estudantes. Em época especial os exercícios de laboratório são substituídos por um exame de 180min.

Pré-requisitos

n.a.

Componente Laboratorial

Exercícios de programação individual (N), sem consulta, todas as semanas em aula. Apenas os melhores N-3 são levados em consideração

Princípios Éticos

Todos os membros de um grupo são responsáveis pelo trabalho do grupo. Em qualquer avaliação, todo aluno deve divulgar honestamente qualquer ajuda recebida e fontes usadas. Numa avaliação oral, todo aluno deverá ser capaz de apresentar e responder a perguntas sobre toda a avaliação.

Componente de Programação e Computação

No curso onde esta UC é oferecida estão asseguradas as componentes de Computação e Programação de acordo com o MEPP 2122.

Componente de Competências Transversais

Não existindo uma componente explícita de Competências Transversais a desenvolver no âmbito desta UC, o desenvolvimento de um projecto levará ao desenvolvimento de Pensamento Crítico e Inovador e Competências Intrapessoais.

Bibliografia

Principal

Compilers: Principles, Techniques, & Tools (2nd Edition)

Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman

2006

Pearson


Compiladores - da Teoria à Prática

Pedro R. Santos, Thibault Langlois

2014

FCA


Secundária

Engineering a Compiler

Keith Cooper, Linda Torczon

2011

Morgan Kaufmann


Processadores de Linguagens, da concepção à implementação

Rui Gustavo Crespo

2001

IST Press