Вы находитесь на странице: 1из 21

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.

Programa Avaliao Bibliografia

MOTIVAO
Linguagens Formais e Autmatos
1

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

Ponto de partida para estudos avanados

I.1 - Introduco a Compiladores


I.1.1 - Definies preliminares
2

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


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

Exemplos : Critrios para def. do num. de passos


Memria disponvel Tempo de Compilao Tempo de execuo Caractersticas da Linguagem
Referncias futuras

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

Vantagens X Desvantagens

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


Interface entre o programa fonte e o compilador
6

Funes bsicas: o Ler o programa fonte o Agrupar caracteres em itens lxicos (tokens)
* * *
*

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

o Ignorar elementos sem valor sinttico


* Espaos em brancos, comentrios e caracteres de controle

o Detectar e diagnosticar erros lxicos


* 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


* Agrupar TOKENS em estruturas sintticas (expresses, comandos, declaraes, etc. ...)
7

* Verificar se a sintaxe da linguagem na qual o programa foi escrito est sendo respeitada * Detectar/Diagnosticar erros sintticos

Exemplos:
B := A * 2.5

<var>

<expresso>

<comando> var A , B : integer

<lista-var>

<tipo>

<declarao> I.1.4.3 - Analisador Semntico


SEMNTICA COERNCIA SIGNIFICADO SENTIDO LGICO

Funes bsicas:
8

* Verificar se as construes utilizadas no P.F. esto semanticamente corretas * Detectar e diagnosticar erros semnticos * Extrair informaes do programa fonte que permitam a gerao de cdigo

Verificaes Semnticas Usuais


* Anlise de escopo * Variveis no declaradas * Mltiplas declaraes de uma mesma varivel * Compatibilidade de tipos * Coerncia entre declarao e uso identificadores

de

* Correlao entre parmetros formais e atuais


* Referncias no resolvidas * 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)
9

categoria varivel * simples - tipo * array - dimenses, tipo dos elementos * record - campos (quant. e apontadores) * ... constante * tipo e valor procedimentos * procedure ou funo * nmero de parmetros * ponteiro para parmetros * se funo, tipo do resultado parmetro * tipo * forma de passagem (valor , referncia) campo de record * tipo, deslocamento dentro do Record

Tratamento ou Recuperao de ERROS: Funes


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

10

I.1.4.4 - Gerador de Cdigo Intermedirio Funo


* Consiste na gerao de um conjunto de instrues (equivalentes ao programa fonte de entrada) para uma mquina hipottica (virtual)

Exemplo
E := ( A + B ) * ( C + D ) Quadrupla ( + , A , B , T1) ( + , C , D , T2) ( + , T1 , T2 , E) Mquina de acumulador
carregue A some B armazene T1 carregue C some D armazene T2 carregue T1 multiplique T2 armazene E

I.1.4.5 - Otimizador de cdigo Funo


* Melhorar o cdigo, de forma que a execuo seja mais eficiente quanto ao tempo e/ou espao ocupado

Otimizaes mais comuns


* Agrupamento de sub-expresses comuns
11

* * * * * *

ex. c := (a + b ) * ( a + b ) Eliminao de desvios para a prxima instruo Retirada de comandos invariantes ao LOOP Eliminao de cdigo inalcanvel Reduo em fora Transformao/avaliao parcial Alocao tima de registradores

I.1.4.6 - Gerador de Cdigo Funo :


* 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
12

Definio Preliminar da Ling. fonte Objetivos Propsito geral ou especfico 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
13

Interpretador Tradutor/Interpretador Pr-Processador Montador

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
14

Arquitetura da Mquina Alvo Repertrio de Instrues Procedimentos de Traduo

15

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
16

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.

17

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

18

Propsitos da Teoria da Computao


(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)

Gramticas (Chomsky, 1959)


Tipos 0, 1, 2 e 3

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)

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

Teoria das Linguagens Formais


19

O que LINGUAGEM FORMAL ? O que LINGUAGEM ? 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 0 exemplo: a = aaa
* 3

Tamanho de uma sentena: Sentena vazia:

Potncia de uma sentena:

Fechamento de um alfabeto:
Reflexivo : V + Transitivo (ou Positivo) : V

20

Linguagens e suas Representaes


Linguagem :

Formas de Representao:
Enumerao Sistemas Geradores Sistemas Reconhecedores

LV

Linguagens Formais
Algoritmos Procedures

Linguagens Recursivas:

Dispositivos / Modelos matemticos

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, ...
21

Вам также может понравиться