Sie sind auf Seite 1von 52

Como construir um compilador utilizando ferramentas Java

Aula 1 - Introduo
Prof. Marcio Delamaro
delamaro@icmc.usp.br

Como construir um compilador utilizando ferramentas Java p. 1/2

O livro

http://www.novatec.com.br/livros/compilador/ http://www.novateceditora.com.br/downloads.php

Como construir um compilador utilizando ferramentas Java p. 2/2

Contedo
Introduo compilao. Descrio da linguagem X++, utilizada como estudo de caso. Apresenta conceitos bsicos sobre linguagens e como deni-las. Anlise lxica. Mostra como se utiliza a ferramenta JavaCC para criar um analisador lxico para a linguagem X++. Anlise sinttica. Mostra como construir um analisador sinttico para X++ utilizando JavaCC.

Como construir um compilador utilizando ferramentas Java p. 3/2

Contedo
rvore sinttica. Mostra como construir a rvore sinttica usando o JavaCC e como utiliz-la nas etapas seguintes. Tabela de smbolos e anlise semntica. Mostra como implementar uma tabela de smbolos utilizada na checagem de tipos e validao semntica. Gerao de cdigo. Mostra como utilizar a ferramenta Jasmin para gerar o cdigo-objeto (bytecode) Java.

Como construir um compilador utilizando ferramentas Java p. 4/2

O que um programa?
Seqncia de 0s e 1s.
CPU Memria A B C D 000 001 002 003 004 005 006 007

Como construir um compilador utilizando ferramentas Java p. 5/2

Operaes simples
Programa armazenado na memria.

Como construir um compilador utilizando ferramentas Java p. 6/2

Operaes simples
Programa armazenado na memria. Programa executado dentro da CPU por meio de instrues muito simples.

Como construir um compilador utilizando ferramentas Java p. 6/2

Operaes simples
Programa armazenado na memria. Programa executado dentro da CPU por meio de instrues muito simples. Somar posio de memria 100 com posio 101 e colocar resultado em 102. copiar o contedo da posio de memria 100 para o registrador A; copiar o contedo da posio de memria 101 para o registrador B; somar o contedo de B em A; copiar o contedo de A para a posio de memria 102.

Como construir um compilador utilizando ferramentas Java p. 6/2

Linguagens de alto nvel


Necessrio desenvolver programas num nvel de abstrao um pouco mais elevado.

Como construir um compilador utilizando ferramentas Java p. 7/2

Linguagens de alto nvel


Necessrio desenvolver programas num nvel de abstrao um pouco mais elevado. Menos dependente das instrues de uma determinada mquina.

Como construir um compilador utilizando ferramentas Java p. 7/2

Linguagens de alto nvel


Necessrio desenvolver programas num nvel de abstrao um pouco mais elevado. Menos dependente das instrues de uma determinada mquina. As linguagens de alto nvel substituem as instrues dos computadores por comandos cujas utilizao e compreenso so mais fceis

Como construir um compilador utilizando ferramentas Java p. 7/2

Linguagens de alto nvel


Necessrio desenvolver programas num nvel de abstrao um pouco mais elevado. Menos dependente das instrues de uma determinada mquina. As linguagens de alto nvel substituem as instrues dos computadores por comandos cujas utilizao e compreenso so mais fceis a=b+c

Como construir um compilador utilizando ferramentas Java p. 7/2

Processo de compilao
As linguagens de programao evoluram

Como construir um compilador utilizando ferramentas Java p. 8/2

Processo de compilao
As linguagens de programao evoluram Mquinas continuam as mesmas ou seja, continuam usando instrues de baixo nvel

Como construir um compilador utilizando ferramentas Java p. 8/2

Processo de compilao
As linguagens de programao evoluram Mquinas continuam as mesmas ou seja, continuam usando instrues de baixo nvel Como usar ento uma linguagem de alto nvel numa mquina que no a compreende?

Como construir um compilador utilizando ferramentas Java p. 8/2

Processo de compilao
As linguagens de programao evoluram Mquinas continuam as mesmas ou seja, continuam usando instrues de baixo nvel Como usar ento uma linguagem de alto nvel numa mquina que no a compreende?
PROGRAMA FONTE COMPILADOR PROGRAMA OBJETO

Como construir um compilador utilizando ferramentas Java p. 8/2

Os componentes de um compilador
o analisador lxico; o analisador sinttico; o analisador semntico; o gerador de cdigo.

Como construir um compilador utilizando ferramentas Java p. 9/2

Analisador lxico
O analisador lxico (AL) encarrega-se de separar no programa fonte cada smbolo que tenha algum signicado para a linguagem ou de avisar quando um smbolo que no faz parte da linguagem encontrado.

Como construir um compilador utilizando ferramentas Java p. 10/2

Anlise lxica
123 x1 ; y2 true begin

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira;

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento;

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula;

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula; y2 nome de varivel ou procedimento;

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula; y2 nome de varivel ou procedimento; true constante booleana;

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula; y2 nome de varivel ou procedimento; true constante booleana; begin palavra reservada.

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula; y2 nome de varivel ou procedimento; true constante booleana; begin palavra reservada. A descrio da linguagem diz quais so os smbolos vlidos e o que signicam

Como construir um compilador utilizando ferramentas Java p. 11/2

Anlise lxica
123 x1 ; y2 true begin 123 constante inteira; x1 nome de varivel ou procedimento; ; smbolo especial ponto-e-vrgula; y2 nome de varivel ou procedimento; true constante booleana; begin palavra reservada. A descrio da linguagem diz quais so os smbolos vlidos e o que signicam Erros lxicos

Como construir um compilador utilizando ferramentas Java p. 11/2

Nem tudo to simples


123x1begin(end

Como construir um compilador utilizando ferramentas Java p. 12/2

Nem tudo to simples


123x1begin(end 123 constante inteira;

Como construir um compilador utilizando ferramentas Java p. 12/2

Nem tudo to simples


123x1begin(end 123 constante inteira; x1begin nome de varivel ou procedimento;

Como construir um compilador utilizando ferramentas Java p. 12/2

Nem tudo to simples


123x1begin(end 123 constante inteira; x1begin nome de varivel ou procedimento; ( smbolo especial abre parnteses;

Como construir um compilador utilizando ferramentas Java p. 12/2

Nem tudo to simples


123x1begin(end 123 constante inteira; x1begin nome de varivel ou procedimento; ( smbolo especial abre parnteses; end palavra reservada.

Como construir um compilador utilizando ferramentas Java p. 12/2

Estados do analisador lxico


"Aqui @ temos uma arroba" /* Isso um comentrio */

Como construir um compilador utilizando ferramentas Java p. 13/2

Analisador sinttico
O AL no se preocupa em vericar se a ordem em que os smbolos aparecem vlida ou no.

Como construir um compilador utilizando ferramentas Java p. 14/2

Analisador sinttico
O AL no se preocupa em vericar se a ordem em que os smbolos aparecem vlida ou no. O analisador sinttico o corao do compilador, responsvel por vericar se a seqncia de smbolos contida no programa fonte forma um programa vlido ou no.

Como construir um compilador utilizando ferramentas Java p. 14/2

Anlise sinttica
if (a - 10 > b * 2) a = b;

O AS deve ser capaz de analisar esse programa e reconhec-lo como vlido. Aps a palavra reservada if deve vir um ( Uma expresso Um ) Um comando qualquer (por exemplo a = b)

Como construir um compilador utilizando ferramentas Java p. 15/2

Descrio da linguagem
O AS construdo sobre uma gramtica livre de contexto que descreve a linguagem fonte. Essa gramtica composta de uma srie de regras que descrevem quais so as construes vlidas da linguagem. O AS deve aceitar aqueles programas que seguem essas regras e rejeitar indicando a ocorrncia de um erro sinttico aqueles que as violam.

Como construir um compilador utilizando ferramentas Java p. 16/2

rvore sinttica
O AS desempenha ainda outra importante funo que a construo da rvore sinttica(rvore de derivao) do programa fonte. Uma rvore sinttica uma estrutura em forma de rvore que descreve as construes da linguagem reconhecidas pelo AS no programa fonte. Se o programa fonte possui um comando if como aquele visto h pouco, sua rvore sinttica deve espelhar esse fato e descrever como esse comando formado.

Como construir um compilador utilizando ferramentas Java p. 17/2

rvore sinttica
if

>

10

Como construir um compilador utilizando ferramentas Java p. 18/2

O analisador semntico
O analisador semntico (ASem) verica se os aspectos semnticos do programa esto corretos, ou seja, se no existem incoerncias quanto ao signicado das construes utilizadas pelo programador.

Como construir um compilador utilizando ferramentas Java p. 19/2

O analisador semntico
O analisador semntico (ASem) verica se os aspectos semnticos do programa esto corretos, ou seja, se no existem incoerncias quanto ao signicado das construes utilizadas pelo programador. No utiliza mais o programa fonte para fazer tal vericao. Em vez disso, utiliza a rvore sinttica como representao do programa.

Como construir um compilador utilizando ferramentas Java p. 19/2

Anlise semntica
Tipos de operandos incompatveis com operadores. Se tivermos o comando a = b * c e a varivel c foi declarada do tipo string, ento o analisador semntico deve apontar um erro semntico, pois esse tipo de operando no compatvel com o operador *

Como construir um compilador utilizando ferramentas Java p. 20/2

Anlise semntica
Tipos de operandos incompatveis com operadores. Se tivermos o comando a = b * c e a varivel c foi declarada do tipo string, ento o analisador semntico deve apontar um erro semntico, pois esse tipo de operando no compatvel com o operador * Variveis no declaradas.

Como construir um compilador utilizando ferramentas Java p. 20/2

Anlise semntica
Tipos de operandos incompatveis com operadores. Se tivermos o comando a = b * c e a varivel c foi declarada do tipo string, ento o analisador semntico deve apontar um erro semntico, pois esse tipo de operando no compatvel com o operador * Variveis no declaradas. Redeclarao de variveis.

Como construir um compilador utilizando ferramentas Java p. 20/2

Anlise semntica
Tipos de operandos incompatveis com operadores. Se tivermos o comando a = b * c e a varivel c foi declarada do tipo string, ento o analisador semntico deve apontar um erro semntico, pois esse tipo de operando no compatvel com o operador * Variveis no declaradas. Redeclarao de variveis. Chamadas de funes ou mtodos com o nmero incorreto de parmetros.

Como construir um compilador utilizando ferramentas Java p. 20/2

Anlise semntica
Tipos de operandos incompatveis com operadores. Se tivermos o comando a = b * c e a varivel c foi declarada do tipo string, ento o analisador semntico deve apontar um erro semntico, pois esse tipo de operando no compatvel com o operador * Variveis no declaradas. Redeclarao de variveis. Chamadas de funes ou mtodos com o nmero incorreto de parmetros. Comandos colocados fora de contexto. Por exemplo, a utilizao de um comando continue fora de um comando de lao deve ser apontada como um erro semntico.

Como construir um compilador utilizando ferramentas Java p. 20/2

Erros semnticos
Esses erros no so detectados pelo AS, pois no constituem erros sintticos. De acordo com a gramtica da linguagem fonte, uma varivel c pode ser utilizada em uma expresso como a = b * c, no importando se foi declarada anteriormente ou no, ou qual o seu tipo.

Como construir um compilador utilizando ferramentas Java p. 21/2

Tabela de smbolos
Para desempenhar seu papel, o ASem depende de uma tabela de smbolos. Nela so armazenadas informaes de variveis declaradas, funes ou mtodos, tipos ou classes. Ao analisar o comando a = b * c (ou melhor, a rvore sinttica correspondente a esse comando), o ASem precisa saber se cada uma das variveis envolvidas foi previamente declarada e o tipo de cada uma delas. O ASem deve, ao analisar um comando de declarao como int c, incluir na tabela de smbolos a varivel c, indicando, entre outras coisas, que seu tipo int.

Como construir um compilador utilizando ferramentas Java p. 22/2

O gerador de cdigo
Uma vez vericado que no existem erros sintticos ou semnticos, o compilador pode realizar sua tarefa, que a criao do programa objeto.

Como construir um compilador utilizando ferramentas Java p. 23/2

O gerador de cdigo
Uma vez vericado que no existem erros sintticos ou semnticos, o compilador pode realizar sua tarefa, que a criao do programa objeto. O programa objeto reete, mediante instrues de baixo nvel, os comandos do programa fonte. Como cada mquina ou cada plataforma possui um conjunto diferente de instrues e de meios de acesso ao sistema operacional, em geral necessrio que exista um gerador de cdigo distinto para cada plataforma.

Como construir um compilador utilizando ferramentas Java p. 23/2

JavaCC
Programa um gerador de compiladores, ou mais precisamente um gerador de analisador sinttico. Ele toma como entrada uma gramtica e transforma-a num programa Java capaz de analisar um arquivo e dizer se satisfaz ou no as regras especicadas nessa gramtica. Ele tambm oferece facilidades para a construo da rvore sinttica. Ao descrever a gramtica, pode-se tambm indicar como a rvore sinttica deve ser construda, incorporando-se cdigo para realizar tal tarefa ao analisador sinttico gerado.

Como construir um compilador utilizando ferramentas Java p. 24/2

Prximo passo
Vamos denir uma linguagem de programao que ser usada como estudo de caso durante o curso. Ver Captulo 2 do livro.

Como construir um compilador utilizando ferramentas Java p. 25/2

Das könnte Ihnen auch gefallen