Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Campus Cornélio Procópio PLANO DE ENSINO CURSO Curso Superior em Engenharia da Computação MATRIZ Resolução nº 90/09 aprovada pelo COEPP em 11/09/09 FUNDAMENTAÇÃO LEGAL Resolução nº 162/09 aprovada pelo COEPP em 21/12/09 DISCIPLINA/UNIDADE CURRICULAR CÓDIGO PERÍODO Compiladores IF66A 6º CARGA HORÁRIA (horas) Teórica Prática Total 30 30 60 PRÉ-REQUISITO Teoria da Computação EQUIVALÊNCIA Não há OBJETIVOS A disciplina abordará conceitos de linguagens formais, autômatos, gramáticas e técnicas para a construção de compiladores. Ao final da disciplina o aluno será capaz de descrever os citados acima assim como será capaz de implementar um compilador utilizando ferramentas de auxílio a construção de compiladores. EMENTA Organização e estrutura de compiladores e interpretadores; Análise léxica e sintática; Gramática formal; Reconhecedores e autômatos; Geração e otimização de código; Tratamento e recuperação de erros; Ambientes de interpretação e execução. CONTEÚDO PROGRAMÁTICO ITEM 1 2 EMENTA Organização e estrutura de compiladores e interpretadores Análise léxica e sintática; Gramática formal; Reconhecedores e autômatos; CONTEÚDO Processo de compilação; Interpretadores e compiladores. Analisadores léxicos; Analisadores sintáticos. Gramáticas; Ambiguidade; Gramáticas Livres de Contexto; Regras de produção e notação BNF; Código de máquina. Tradução de estruturas de repetição, controle de fluxo para código de máquina. Verificação de tipos e formas otimização de código. Construção de ambientes de interpretação e execução; Implementação de um compilador. Geração e otimização de código; 3 4 Ambientes de interpretação e execução. PROFESSOR TURMA Fábio Fernandes da Rocha Vicente C61 ANO/SEMESTRE 2013-2 AT 36 AP 36 CARGA HORÁRIA (aulas) APS 4 AD 0 Total 76 AT: Atividades Teóricas, AP: Atividades Práticas, APS: Atividades Práticas Supervisionadas, AD: Atividades a Distância. DIAS DAS AULAS PRESENCIAIS Dia da semana Número de aulas no semestre Segunda Terça Quarta Quinta Sexta Sábado 36 36 0 0 0 Dia/Mês ou Semana 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 Conteúdo das Aulas Apresentação da disciplina; Conceitos introdutórios Caracterização de linguagens de programação Processo de compilação Processo de compilação Implementação pura; Sistemas de implementação híbridos; Organização es estrutura de compiladores (revisão) Analisadores léxicos Analisadores léxicos Analisadores sintáticos BNF e regras de produção BNF e regras de produção BNF e regras de produção BNF e regras de produção BNF e regras de produção Construção de um compilador: analisador léxico e sintático (gramática portugol) Construção de um compilador: analisador léxico e sintático (gramática portugol) Avaliação 1 Construção de um compilador: analisador léxico e sintático (gramática portugol) Construção de um compilador: analisador léxico e sintático (gramática portugol) Construção de um compilador: analisador léxico e sintático (gramática portugol) Construção de um compilador: analisador léxico e sintático (gramática portugol) Construção de um compilador: analisador léxico e sintático (gramática portugol) Geração de código: código de máquina (MEPA) Geração de código: código de máquina (MEPA) Geração de código: código de máquina (MEPA) Geração de código: código de máquina (MEPA) Construção do compilador portugol --> MEPA Construção do compilador portugol --> MEPA APS: Compilador Portugol --> MEPA Construção do compilador portugol --> MEPA (otimização de código) Construção do compilador portugol --> MEPA (otimização de código) Ambiente de interpretção e execução Ambiente de interpretção e execução Ambiente de interpretção e execução Prova Prova PROCEDIMENTOS DE ENSINO AULAS TEÓRICAS Destinadas a apresentação dos conceitos de compiladores AULAS PRÁTICAS Número de Aulas 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 Destinadas a implementação de um compilador Portugol para MEPA (Máquina de Execução Pascal). Definição da linguagem: lexemas, aspectos da linguagem, gramática e geração de código. ATIVIDADES PRÁTICAS SUPERVISIONADAS Implementação do compilador utilizando as ferrmentas YACC. PROCEDIMENTOS DE AVALIAÇÃO Avaliação através 2 provas escritas e Atividade Prática Supervisionada (APS). A APS cobrirá a implementação de um compilador de uma linguagem Portugol para uma máquina de poucas instruções chamada MEPA. Avaliação 1 (A1) - Peso 4: Avaliação do conteúdo apresentado em sala de aula até a data da prova. Avaliação 2 (A2) - Peso 5: Avaliação do conteúdo apresentado em sala de aula até a data da prova. Atividade Prática Supervisionada (APS) - Peso 1: Trabalho contendo um programa executável que compile uma linguagem Portugol definida em sala de aula e gere código para a máquina MEPA (definida em sala de aula). O trabalho incluirá : (a) definição dos tokens da linguagem, (b) definição da gramática e das regras de produção, (c) geração de código (deve incluir: implementação de rotinas para manutenção da pilha semântica e manutenção da tabela de símbolos). Média final = A1 x 0,4 + A2 x 0,5 + APS x 0,1 REFERÊNCIAS Referências Básicas: AHO, Alfred V. et al. Compiladores: princípios, técnicas e ferramentas. 2. ed. São Paulo: Pearson, 2008. 634 p. LOUDEN, Kenneth C. Compiladores: princípios e práticas. São Paulo: Pioneira, 2004. 569p. PRICE, Ana Maria de Alencar; TOSCANI, Simão Sirineo. Implementação de linguagens de programação: compiladores. 3. ed. Porto Alegre: Bookman, 2008. Referências Complementares: DELAMARO, Márcio Eduardo. Como construir um compilador utilizando ferramentas Java. São Paulo: Novatec, 2004. 307 p. ISBN 85-7522-055-1. ORIENTAÇÕES GERAIS Fábio Fernandes da Rocha Vicente Professor Rodrigo Henriques Cunha Palácios Coordenador do Curso de Engenharia da Computação