Você está na página 1de 20

INE5622 INTRODUO A COMPILADORES

PLANO DE ENSINO
Objetivo geral

Conhecer o processo de especificao e implementao de linguagens de programao, a partir do estudo dos conceitos, modelos, tcnicas e ferramentas que compem a Teoria das Linguagens Formais e a Teoria de Compiladores.

Objetivos especficos

Adquirir uma viso geral sobre o Processo de Compilao sob o ponto de vista de implementao. Adquirir noes bsicas sobre a Teoria das Linguagens Formais.

Saber especificar aspectos lxicos e sintticos de linguagens atravs de autmatos e gramticas. Conhecer critrios e caractersticas usados no projeto/avaliao de Linguagens de Programao. Conhecer as principais tcnicas e ferramentas de apoio usadas na construo de compiladores, sabendo us-las na especificao e implementao de linguagens de programao.

Obter Subsdios que permitam um melhor entendimento, utilizao e avaliao das Linguagens de Programao.

MOTIVAO
1

Programa Avaliao Bibliografia

Linguagens Formais e Autmatos


Necessidade de uma viso geral dos Fundamentos Tericos da Computao
Contato com Modelos e Tcnicas Formais usadas na especificao/implementao de Linguagens

Capacidade para correlacionar aspectos tericos e prticos da Computao


Base para a melhoria no entendimento, no uso e na produo de software (bsico e aplicativo)

Linguagens de Programao e Compiladores Melhorar o entendimento de L.P.


aspectos conceituais x implementaes escolha e uso mais racional/eficiente facilitar o aprendizado de novas linguagens

Capacidade para Especificar/Implementar Linguagens


Uso geral novas, extenses, atualizaes Uso especfico Tempo Real, Robtica, Descriao de Hardware S. O., B.D., Protocolos, Redes, Ling. Naturais

Uso dos modelos/ tcnicas em outros sistemas


Proc. de textos, Reconh. de padres, SI em geral

I.1 - Introduco a Compiladores

Ponto de partida para estudos avanados

I.1.1 - Definies preliminares Tradutor

um programa que traduz um programa fonte escrito em uma linguagem qualquer (denominada linguagem fonte) para um programa objeto equivalente escrito em outra linguagem (denominada linguagem objeto)
Pf / Lf Tradutor Po / Lo

Compilador
um Tradutor em que a linguagem fonte uma linguagem de alto nvel e a linguagem objeto uma linguagem de baixo nvel (assembly ou mquina)
Po / La Pf / Lan Compilador Po / Lm

Interpretador
um programa que interpreta diretamente as instrues do programa fonte, gerando o resultado.
Pf / Lq Interpretador Resultados

Tradutor / Interpretador
Esquema hbrido para implementao de linguagens de programao

Pf / Lan

Tradutor

Po / Lint

Interpretador

Resultados

Montador
um Tradutor em que o programa fonte est escrito em linguagem assembly e o programa objeto resultante est em linguagem de mquina
Pf / La Montador Po / Lm

Pr-processador
um Tradutor em que tanto o programa fonte quanto o programa objeto esto escritos em linguagens de alto nvel
Pf/Lan1 Pr-Proc. Po/Lan2

Cross - Compiler
Compilador que gera cdigo para uma mquina diferente da utilizada na compilao.

I.1.2 - Estrutura geral de um Compilador


P. Fonte
Compilador Anlise

Anlise Lxica Anlise Sinttica Anlise Semntica

Sntese

Gerao de Cdigo Intermedirio

Otimizao de Cdigo Gerao de Cdigo

P. Objeto

I.1.3 - Formas de Implementao de Compiladores

Fase - Procedimento que realiza uma funo bem


definida no processo de compilao.

Passo - Passagem completa do programa compilador


sobre o programa fonte que est sendo compilado.

Formas de Implementao Compiladores de 1 e de vrios passos

Exemplos :

Dependendo da quantidade de vezes que o P.F. analisado at que o cdigo objeto seja gerado Diferentes composies (agrupamento de fases)

Critrios para def. do num. de passos


Memria disponvel Tempo de Compilao Tempo de execuo Caractersticas da Linguagem

Referncias futuras

Vantagens X Desvantagens

Caractersticas das Aplicaes Importncia da Otimizao Tamanho / Experincia da Equipe Disponibilidade de Ferramentas de Apoio Prazo para desenvolvimento

I.1.4 - Fases de um Compilador I.1.4.1 - Analisador Lxico


Interface entre o programa fonte e o compilador Funes bsicas: o Ler o programa fonte o Agrupar caracteres em itens lxicos (tokens)
6

*0 *1 *2 *3

Identificadores Palavras Reservadas Constantes (numricas e literais) Smbolos especiais (simples, duplos, ...)

o Ignorar elementos sem valor sinttico


*4 Espaos em brancos, comentrios e caracteres de controle

o Detectar e diagnosticar erros lxicos


*5 Smbolos invlidos, elementos mal formados

Exemplo: Programa Fonte program exemplo; var A, B : integer; begin (* Inicio do programa *) read ( A ); B := A + 2.5; ... end.

Tokens Reconhecidos
program exemplo ; var A , ... end . 1 - PR 2 - ID 3 - SE 4 - PR 2 - ID 5 - SE ... 37 - PR 38 - SE

I.1.4.2 - Analisador Sinttico Funes bsicas


*6Agrupar TOKENS em estruturas sintticas (expresses, comandos, declaraes, etc. ...) *7Verificar se a sintaxe da linguagem na qual o programa foi escrito est sendo respeitada *8Detectar/Diagnosticar erros sintticos

Exemplos:
B

:=

A * 2.5

<var>

<expresso>

<comando> var A , B <lista-var> : integer <tipo>

<declarao> I.1.4.3 - Analisador Semntico


SEMNTICA COERNCIA SIGNIFICADO SENTIDO LGICO

Funes bsicas:
*9 Verificar se as construes utilizadas no P.F. esto semanticamente corretas *10 Detectar e diagnosticar erros semnticos
8

*11 Extrair informaes do programa fonte que permitam a gerao de cdigo

Verificaes Semnticas Usuais


*12 Anlise de escopo *13 Variveis no declaradas *14 Mltiplas declaraes de uma mesma varivel *15 Compatibilidade de tipos *16 Coerncia entre identificadores
*17

declarao

uso

de

Correlao entre parmetros

formais e atuais

*18 Referncias no resolvidas *19 Procedimentos e desvios

Tabela de Smbolos :
Definio - Estrutura onde so guardadas as
informaes (os atributos) essenciais identificador utilizado no programa fonte. sobre cada

Atributos mais comuns

nome endereo relativo (nvel e deslocamento) categoria varivel *20 simples - tipo
9

*21 array - dimenses, tipo dos elementos *22 record - campos (quant. e apontadores) *23 ... constante *24 tipo e valor procedimentos *25 procedure ou funo *26 nmero de parmetros *27 ponteiro para parmetros *28 se funo, tipo do resultado parmetro *29 tipo *30 forma de passagem (valor , referncia) campo de record *31 tipo, deslocamento dentro do Record

Tratamento ou Recuperao de ERROS: Funes


*32 Diagnosticar erros lxicos, sintticos e semnticos encontrados na etapa de anlise *33 Tratar os erros encontrados, de forma que a anlise possa ser concluda

I.1.4.4 - Gerador de Cdigo Intermedirio Funo

10

Exemplo

*34 Consiste na gerao de um conjunto de instrues (equivalentes ao programa fonte de entrada) para uma mquina hipottica (virtual) E := ( A + B ) * ( C + D ) Mquina de acumulador
carregue A some B armazene T1 carregue C some D armazene T2 carregue T1 multiplique T2 armazene E

Quadrupla ( + , A , B , T1) ( + , C , D , T2) ( + , T1 , T2 , E)

I.1.4.5 - Otimizador de cdigo Funo


*35 Melhorar o cdigo, de forma que a execuo seja mais eficiente quanto ao tempo e/ou espao ocupado *36 Agrupamento de sub-expresses comuns ex. c := (a + b ) * ( a + b ) *37 Eliminao de desvios para a prxima instruo *38 Retirada de comandos invariantes ao LOOP *39 Eliminao de cdigo inalcanvel
11

Otimizaes mais comuns

*40 Reduo em fora *41 Transformao/avaliao parcial *42 Alocao tima de registradores

I.1.4.6 - Gerador de Cdigo Funo :


*43 Converter o programa fonte (diretamente ou a partir de sua representao na forma de cdigo intermedirio) para uma sequncia de instrues (assembler ou mquina) de uma mquina real.

I.1.5 - Planejamento da Construo de um Compilador


Por que necessrio construir um novo compilador ? Criao de uma nova Linguagem Extenso de uma linguagem existente Surgimento de uma nova mquina Desempenho do compilador existente Definio Preliminar da Ling. fonte Objetivos Propsito geral ou especfico
12

Comercial ou experimental Filosofia de Programao Imperativa (Estruturada/Objetos) Funcional, Lgica Mista (Multi - Paradigma) Potencialidade(s) Bsica(s) Sistema de Tipos Concorrncia (Multi-Thread) Distribuio, Facilidades de B. D. Abstrao Funcional Definio preliminar da ling. objeto Nvel Alto nvel, Intermediria Assembly, Mquina Mquina Alvo Real ou Hipottica (Virtual) Definio do Tipo de Tradutor Compilador Interpretador Tradutor/Interpretador Pr-Processador Montador
13

Estrutura do Tradutor Nmero de fases Nmero de passos Forma de Integrao Linguagens Intermedirias Definio do Ambiente Operacional
Hardware e sistema Operacional Linguagem de Implementao Disponibilidade de Ferramentas

Especificao da Linguagem Fonte Completa e Detalhada Aspectos Lxicos Aspectos Sintticos Aspectos Semnticos Especificao da Linguagem Objeto Completa e Detalhada Arquitetura da Mquina Alvo Repertrio de Instrues Procedimentos de Traduo

14

I.2Introduo Teoria das Linguagens Formais Teoria da Computao


O que ?
Fundamento da Cincia da Computao Tratamento Matemtico da Cincia da Computao Estudo Matemtico da Transformao da Informao Guia : Que problemas podem ser efetivamente computveis, como e com que complexidade

Qual sua importncia?

Classificao dos problemas:


No-Computveis Computveis Indecidveis Decidveis Intratveis Tratveis

Exemplos de problemas:

Computabilidade / Decidibilidade Equivalncia entre Programas Garantia de parada de um programa Complexidade de Algoritmos Significado e Correo de Programas

15

Teoria da Computao X Teoria das Linguagens Formais Definio de Teoria da Computao sob a tica da Teoria das Linguagens Formais:
Conjunto de Modelos Formais (autmatos e gramticas, p. ex.), que juntamente com suas propriedades (decidibilidade, equivalncia e complexidade), fundamentam a Cincia da Computao.

16

Conceitos e Propsitos Fundamentais da Teoria da Computao

PROCEDURE X ALGORITMO
Procedure: Sequncia finita de passos, executveis
mecanicamente de forma discreta.

Algoritmo : uma procedure que, independentemente


das entradas, possui parada garantida.

Exemplos:

Determinar se I 1 um nmero primo Determinar se existe um nmero perfeito > I Determinar se um programa est sintaticamente correto Determinar se um programa qualquer entrar em loop para uma entrada qualquer (Halting Problem) Conj. Recursivos e Recursivamente Enumerveis X

Algoritmos e Procedures

X Problemas Decidveis e Problemas Indecidveis

Propsitos da Teoria da Computao


17

(ou : Modelos que formalizam a noo do que do que no efetivamente computvel)

Mquinas de Turing (Turing, 1936)

Tese de CHURCH Todo processo efetivo pode ser realizado por uma mquina de turing) Tipos 0, 1, 2 e 3

Gramticas (Chomsky, 1959) Algoritmos de Markov (Markov, 1951)


Sistemas de regras de produo Processamento de strings

-Calculus (Church, 1936)

Mtodo para especificao de funes Influenciou programao funcional Formalizao de sistemas de re-escrita Lgica formal e sistemas especialistas

Sistemas de POST (Emil Post, 1936)

Funes Recursivas (Kleene, 1936)

Teoria das Linguagens Formais


O que LINGUAGEM ?

Mtodo para definio de funes a partir de um conjunto de equaes exemplo : XY = 1, se y = 0 Y-1 = X . X , se y > 0 O que LINGUAGEM FORMAL ?

18

Forma de comunicao Conjunto de smbolos + conjunto de regras Exemplos: L. Mquina, PASCAL, Portugus, ...

Conceitos Bsicos
Alfabeto : Sentena:

Conjunto finito e no vazio de smbolos Sequncia de smbolos de um alfabeto Quantidade de smbolos de uma sentena denotada por , uma sentena de tamanho exemplo: a3 = aaa

Tamanho de uma sentena: Sentena vazia:


0

Potncia de uma sentena: Fechamento de um alfabeto:


Reflexivo : V* Transitivo (ou Positivo) : V+

Linguagens e suas Representaes


Linguagem :

Formas de Representao:
19

L V

Linguagens Formais
Algoritmos Procedures

Enumerao Sistemas Geradores Sistemas Reconhecedores Dispositivos / Modelos matemticos

Linguagens Recursivas:

Linguagens Recursivamente Enumerveis Teoria das Linguagens Formais:


Estudo dos modelos matemticos que possibilitam a especificao, o reconhecimento, a classificao, as propriedades e o interrelacionamento entre linguagens.

Importncia da Teoria das Linguagens:


Apia aspectos bsicos da Teoria da Computao: Decidibilidade, Computabilidade e complex. Fundamenta Aplicaes Computacionais: Processamento de Linguagens (esp. / impl.), Rec.de Padres, Modelagem de Sistemas, ...

20