CRÉDITOS: 3
Aulas Práticas: 30 horas
Aulas Teóricas: 30 horas
Carga Horária: 60 horas
Ementa:
Gramáticas. Automatos. Computabilidade. Análise lexica. Análise
sintática. Geração de código. Recuperação de erros. Compiladores de
compiladores.
Objetivo:
Propiciar o entendimento dos fundamentos de linguagens de programação e dos
conceitos que orientam o seu projeto. Estudar métodos e ferramentas para a
implementação de processadores de linguagens de programação.
Pré-requisito(s):
CI059 - Introdução à Teoria da Computação
Programa:
Visão histórica, processadores de linguagens, tipos de tradutores.
Arquitetura de um compilador.
Análise Léxica.
Especificação de um analisador léxico. Lex, um gerador de analisadores
léxicos.
Análise Sintática.
Gramáticas para linguagens de programação. Tipos de análise sintática.
A função do analisador sintático; Gramáticas.
Construcao de conjuntos PRIMEIROS, SEGUINTES, e PREDICT.
Análise sintática descendente. Linguagens LL(1).
Construção de analisadores sintáticos recursivos descendentes.
Análise sintática ascendente. Metodo LR. Linguagens LR(1). Método SLR(1);
Yacc/Bison, um gerador de analisadores sintáticos.
Análise Semântica.
Tipos e escopo.
Tradução dirigida por sintaxe. Gramáticas de Atributos.
Geração de código.
Bibliografia:
A V Aho, R Sethi, J D Ullman. Compilers - Principles, and Tools.
Addison-Wesley, 1995.
T Kowaltowski. Implementação de Linguagens de Programação. Ed.
Guanabara Dois.