Objetivos | Esta UC insere-se no 3º ano de um 1º ciclo, onde se pretende alcançar uma formação base na área do curso, situando-se na subárea das Ciências da Computação. A UC de Processamento de Linguagens usa os conhecimentos adquiridos nas UCs antecedentes de Programação, nomeadamente de algoritmos imperativos e de estruturas de dados (tabelas, árvores e grafos). O objetivo geral é ensinar formalismos para especificar as linguagens e técnicas para derivar desses formalismos programas para reconhecer e transformar frases dessas linguagens. |
Programa | 1. Introdução ao Processamento de Linguagens: a noção de Linguagem e de Gramática, Interpretador versus Compilador; Arquitetura de um processador de linguagens: análise léxica, análise sintática e análise semântica. 2. Linguagens Regulares e Análise Léxica; Especificação de linguagens regulares com expressões regulares; Reconhecimento de linguagens especificadas com expressões regulares: o conceito de autómato; Conversão de Expressões Regulares em Autómatos Finitos Determinísticos; A ferramenta flex como gerador de autómatos. 3. Análise Sintática: Linguagens e Gramáticas Independentes de Contexto; Estrutura e funcionamento de um parser; Parsing Top-Down: o Recursivo-descendente e LL(1); Parsing Bottom-UP: LR(0), LR(1) e SLR(1); Utilização da ferramenta yacc como gerador de parsers Bottom-UP. 4. Análise Semântica. 5. Transformação especificada via Gramáticas Tradutoras (GT) - Tradução Dirigida pela Sintaxe. |
Bibliografia | Pedro Reis Santos & Thibault Langlois, "Compiladores – Da Teoria à Prática", FCA, 2014. R. G. Crespo, "Processadores de Linguagens: da concepção à implementação", IST-Press, 1998. Aho & Sethi & Ullman, "Compiler Principles, Techniques and Tools", Addison-Wesley, 1986. William Waite & Carter, "An Introduction to Compiler Construction", HarperCollin College Publishers, 1993. Dick Grune & Kees van Reeuwijk & Henri E. Bal & Ceriel J.H. Jacobs & Koen Langendoen, "Modern Compiler Design", 2nd. edition, Springer, 2012. |
Resultados da aprendizagem | Competências específicas a adquirir na área de Processamento de Linguagens: - Capacidade de especificar linguagens de domínio específico através de gramáticas; - Capacidade de desenvolver processadores para essas linguagens com base na respetiva gramática; - Capacidade de extrair dados de um texto com base em regras de produção (padrão-ação) baseadas em expressões regulares; - Capacidade de transformar qualquer texto num outro formato com base em regras de produção (padrão-ação) baseadas em expressões regulares; - Capacidade para usar programas que produzem programas com base em especificações formais (geradores de analisadores léxicos e de compiladores); - Conhecimentos sobre autómatos como modelos formais de máquinas de estado e base de reconhecedores de frases guiados por tabela; - Capacidade de utilização de ferramentas genéricas de informática em ambiente Linux baseadas em expressões regulares, em grafos ou outras. |
Método de avaliação | A avaliação da aprendizagem envolve: um trabalho de desenvolvimento experimental e escrito, a realizar em grupo, consubstanciando uma componente de carácter individual. Tanto a componente individual (teste ou exame) como a componente de grupo (trabalhos práticos) têm limite de execução temporal bem definido, nunca excedendo o período letivo. A classificação final é dada na forma: - 40% Da classificação provém da componente prática de grupo; - 60% Da classificação provém da componente individual. É considerado aprovado o aluno cuja nota final seja superior ou igual a 10 (dez) valores, sendo obrigatório ter classificação positiva em todos os instrumentos de avaliação. |