MINISTÉRIO DA EDUCAÇÃO

UNIVERSIDADE FEDERAL DE SANTA CATARINA

CENTRO TECNOLÓGICO

DEPARTAMENTO DE INFORMÁTICA E ESTATÍSTICA

PROGRAMA DE ENSINO

1. Identificação

Disciplina:INE5426 - Construção de Compiladores
Nível:Graduação
Carga Horária:72 horas-aula (Teórica: 20; Prática: 52)
Vigência:De 2020-1 até a presente data

2. Ementa

Projeto de especificação de linguagens de programação. Implementação das etapas que compreendem o processo de compilação: Análise Léxica, Análise Sintática, Análise Semântica, Geração e Otimização de Código. Evolução e tendências da área de compiladores e linguagens de programação.

3. Cursos Relacionados

4. Objetivos

4.1 Objetivo Geral:

Dotar o aluno de conhecimento básico dos conceitos e técnicas necessários para a construção de compiladores, bem como para a compreensão dos conhecimentos envolvidos no projeto de linguagens de programação e o tratamento computacional de linguagens em geral

4.2 Objetivos Específicos:

  1. Compreender os aspectos ligados ao projeto de linguagens de programação
  2. Descrever a organização arquitetural dos compiladores e e seu funcionamento
  3. Compreender e implementar os principais algoritmos de análise léxica.
  4. Compreender e implementar os principais algoritmos de análise sintática
  5. Compreender e implementar os processos de análise semântica adotados nos compiladores
  6. Descrever as técnicas de recuperação de erros utilizadas nos compiladores.
  7. Identificar as formas de geração e de representação de código intermediário
  8. Compreender as técnicas de otimização de código e geração de código objeto
  9. Identificar, avaliar e utilizar ferramentas de apoio na constução de compiladores

5. Conteúdo Programático

  1. A estrutura de um compilador [1 hora-aula]
  2. Linguagens de programação [1 horas-aula]
    1. Características principais
  3. Especificação e projeto de uma linguagem [6 horas-aula]
  4. Análise léxica [2 horas-aula]
  5. Construção de um analisador léxico [8 horas-aula]
  6. Análise sintática e correção de erros [6 horas-aula]
  7. Construção de um analisador sintático [12 horas-aula]
  8. Análise semântica [6 horas-aula]
  9. Implementação da análise semântica [12 horas-aula]
  10. Geração de código intermediário e otimização [6 horas-aula]
  11. Implementação do gerador de código [12 horas-aula]

6. Bibliografia Básica

  1. MOGENSEN, T. AE. Introduction to Compiler Design. Springer, 2011.
  2. SU, Y., and YAN, S. Y. Principles of Compilers. Springer, 2011.
  3. BORNAT, R. Understanding and Writing Compilers. Springer, 1979.
  4. DOS REIS, A. J. Compiler Construction Using Java, JavaCC, and Yacc. Wiley, 2012.

7. Bibliografia Complementar

  1. AHO, A.V.; LAM, M. S.; SETHI, R. ULLMAN, J.D. Compiladores ? Princípios, Técnicas e Ferramentas, Pearson, 2008
  2. DELAMARO, Márcio Eduardo. Como Construir um acompilador. São Pauo, Novatec, 2004.
  3. PRICE, Ana Maria de Alencar, TOSCANI, Simão Sirineo. Implementação de Linguagens de Programação: Compiladores. Porto Alegre, Sagra, 2004.
  4. HOPCROFT, J. E., ULLMAM, J. D. Formal Languagens and Their Relations to Automata. Addison-Wesley, 1969..
  5. HOPCROFT, J. F., ULLMAN, J. D.. Introduction to Automata Theory, Languagens and Computation. Ed. Addison-Wesley, 1979
  6. MENESES, P. B. Linguagens Formais e Autômatos, Ed. Sagra Luzzato, 2. edição, 1998.
  7. AHO, A. V., ULLMAN, J. D. The Theory of Parsing, Translation, and Compiling. Volume I: Parsing. Ed Prentice-Hall, Inc. 1972, 542p