Objetivos

Competências específicas a adquirir na área de Processamento de Linguagens:

  • Especificar linguagens de domínio específico através de gramáticas;
  • Desenvolver processadores para essas linguagens com base na respetiva gramática;
  • Desenvolver Compiladores que gerem código Assembly de Máquinas (virtuais) de Stack;
  • Extrair dados de um texto com base em regras de produção (padrão-ação) baseadas em expressões regulares;
  • Transformar qualquer texto num outro formato com base em regras de produção (padrão-ação) baseadas em expressões regulares;
  • Utilizar programas que produzem programas com base em especificações formais (geradores de analisadores léxicos e de compiladores).

Programa

  1. Introdução ao Processamento de Linguagens: 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; PLI-lex 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) e SLR(1); Utilização da ferramenta PLI-yacc como gerador de parsers Bottom-UP.
  4. Análise Semântica e Transformação especificada via Gramáticas Tradutoras (GT) —Tradução Dirigida pela Sintaxe; o Gerador de Compiladores PLI-yacc.

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, 2006;
  • Dick Grune & Kees van Reeuwijk & Henri E. Bal & Ceriel J.H. Jacobs & Koen Langendoen, “Modern Compiler Design”, 2nd. edition, Springer, 2012;
  • Keith D. Cooper & Linda Torczon, “Engineering a Compiler”, 2nd. edition, Elsevier/Morgan-Kaufmann, 2011.

Atualizado: