Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Compiladores

De Wikiversidade

Programa do Componente Curricular

[editar | editar código]
Código: CC0032
Componente Curricular: Compiladores
Semestre de Oferta: 6º Semestre Tipo: Disciplina Caráter: Obrigatória
Unidade Acadêmica Responsável: Centro de Ciências e Tecnologia - CCT
Área: Programação
Créditos: 4 Carga horária: 64 Teórica: 48 Prática: 16 Extensão: -
Pré-requisito: CC0020 - Arquitetura e Organização de Computadores, CC0022 - Fundamentos de Linguagens de Programação e CC0066 - Autômatos e Linguagens Formais
Co-requisito:
Equivalência:

Objetivos

[editar | editar código]

A implementação de uma linguagem de programação exige conhecimento teórico abstrato de Linguagens Formais, habilidade de programação muito desenvolvida, conhecimento detalhado da linguagem a ser implementada, domínio de diversas estruturas de dados e compreensão da arquitetura das máquinas nas quais a linguagem será implementada, incluindo a sua linguagem de montagem (incluem-se nestas as chamadas máquinas virtuais). Sendo assim, a disciplina de Compiladores é uma oportunidade importante de consolidação de conhecimentos desenvolvidos em outras disciplinas. Este curso, além da consolidação dos conceitos já mencionados, tem também o objetivo de preparar o aluno a compreender e especificar uma linguagem de programação definindo e implementando cada estrutura de seu compilador (Analisadores Léxico, Sintático, Semântico e Geração de Código).

Análise Léxica. Análise Sintática. Análise Semântica. Ambientes de Execução. Geração de Código. Projeto e Implementação de um Compilador.

Conteúdo

[editar | editar código]
  • Analise semântica
  • Representação intermediária
  • Construção da Linguagem
  • LLVM
  • Automatos finitos
  • Tradução dirigida por sintaxe
  • Construção do tradutor
  • Análise léxica
  • Expansão do tradutor
  • Tabela de símbolos
  • Expressões regulares
  • Reconhecimento de tokens
  • Ferramentas de análise léxica
  • Geradores de analisadores lexicos
  • Gramáticas
  • Transformação de gramáticas
  • FIRST E FOLLOW
  • Análise descendente
  • Ferramentas de análise sintática
  • Utilização do Bison

Metodologia

[editar | editar código]

A disciplina combina aulas expositivas e práticas, promovendo a integração entre teoria e aplicação prática. As atividades propostas buscam desenvolver tanto o domínio conceitual quanto habilidades de colaboração e resolução de problemas.

  • Aulas de conteúdo: exposição teórica dos conceitos, métodos e técnicas relacionadas ao tema da disciplina;
  • Aulas de exercícios: resolução de listas de exercícios, discussão em grupo e apresentação de soluções passo a passo, visando consolidar o aprendizado e aplicar os conceitos na prática;
  • Acompanhamento de projeto: encontros destinados à orientação e acompanhamento do desenvolvimento dos projetos dos alunos, com feedback contínuo sobre o progresso e aplicação dos conceitos estudados.

Avaliação

[editar | editar código]

A avaliação da disciplina é composta por momentos teóricos e práticos, voltados para verificar tanto o domínio conceitual quanto a aplicação dos conteúdos.

  • Duas Provas: avaliações escritas que abordam os principais tópicos estudados, permitindo verificar a compreensão teórica e a capacidade de resolução de problemas;
  • Trabalho: desenvolvimento de uma atividade prática ou projeto aplicado, individual ou em grupo, relacionado aos temas da disciplina.

A nota final é calculada com base no desempenho nas duas provas e no trabalho, conforme os critérios definidos pelo professor responsável.

Bibliografia Básica

[editar | editar código]
  1. LOUDEN, K. C. Compiladores: princípios e práticas. São Paulo: Thomson, 2004. 569 p.
  2. SETZER, V. W.; MELO, I. S. H. A Construção de um Compilador. 3a ed. Editora Campus, 1986.
  3. PRICE, A. M. A.; TOSCANI, S. S. Implementação de Linguagens de Programação: Compiladores. Editora Sagra Luzzatto, 2000.

Bibliografia Complementar

[editar | editar código]
  1. SEBESTA, R. W. Conceitos De Linguagem De Programação. Editora Bookman, 2018.
  2. KOWALTOWSKY, T. Implementação de Linguagens de Programação. São Paulo, Guanabara Dois, 1983.
  3. NETO, J. J. Introdução à Compilação. Rio de Janeiro, Livros Técnicos Científicos, 1987.
  4. WIRTH, N. Algorithms and Data Structures. Englewood Cliffs: Prentice-Hall, 1986
  5. MENEZES, P. F. B. Linguagens Formais e Autômatos. 3a Edição. Série Livros Didáticos. Instituto de Informática da UFRGS.