Escolar Documentos
Profissional Documentos
Cultura Documentos
ferramentas Java
Aula 1 - Introduo
Prof. Marcio
Delamaro
delamaro@icmc.usp.br
O livro
http://www.novatec.com.br/livros/compilador/
http://www.novateceditora.com.br/downloads.php
Contedo
Introduo compilao.
Descrio da linguagem X++, utilizada como estudo de
caso. Apresenta conceitos bsicos sobre linguagens e
como defini-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.
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.
O que um programa?
Seqncia de 0s e 1s.
CPU
Memria
A
B
C
D
000
001
002
003
004
005
006
007
Operaes simples
Programa armazenado na memria.
Operaes simples
Programa armazenado na memria.
Programa executado dentro da CPU por meio de
instrues muito simples.
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.
Processo de compilao
As linguagens de programao evoluram
Processo de compilao
As linguagens de programao evoluram
Mquinas continuam as mesmas ou seja, continuam
usando instrues de baixo nvel
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?
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
PROGRAMA
FONTE
OBJETO
COMPILADOR
Os componentes de um compilador
o analisador lxico;
o analisador sinttico;
o analisador semntico;
o gerador de cdigo.
Analisador lxico
O analisador lxico (AL) encarrega-se de separar no
programa fonte cada smbolo que tenha algum significado
para a linguagem ou de avisar quando um smbolo que no
faz parte da linguagem encontrado.
Anlise lxica
123 x1 ; y2 true begin
Anlise lxica
123 x1 ; y2 true begin
123 constante inteira;
Anlise lxica
123 x1 ; y2 true begin
123 constante inteira;
x1 nome de varivel ou procedimento;
Anlise lxica
123 x1 ; y2 true begin
123 constante inteira;
x1 nome de varivel ou procedimento;
; smbolo especial ponto-e-vrgula;
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;
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;
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.
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 significam
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 significam
Erros lxicos
Analisador sinttico
O AL no se preocupa em verificar se a ordem em que
os smbolos aparecem vlida ou no.
Analisador sinttico
O AL no se preocupa em verificar se a ordem em que
os smbolos aparecem vlida ou no.
O analisador sinttico o corao do compilador,
responsvel por verificar se a seqncia de smbolos
contida no programa fonte forma um programa vlido ou
no.
Anlise sinttica
if (a - 10 > b * 2)
a = b;
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.
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.
rvore sinttica
if
>
10
O analisador semntico
O analisador semntico (ASem) verifica se os aspectos
semnticos do programa esto corretos, ou seja, se no
existem incoerncias quanto ao significado das
construes utilizadas pelo programador.
O analisador semntico
O analisador semntico (ASem) verifica se os aspectos
semnticos do programa esto corretos, ou seja, se no
existem incoerncias quanto ao significado das
construes utilizadas pelo programador.
No utiliza mais o programa fonte para fazer tal
verificao. Em vez disso, utiliza a rvore sinttica como
representao do programa.
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 *
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.
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.
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.
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.
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.
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.
O gerador de cdigo
Uma vez verificado que no existem erros sintticos ou
semnticos, o compilador pode realizar sua tarefa, que
a criao do programa objeto.
O gerador de cdigo
Uma vez verificado que no existem erros sintticos ou
semnticos, o compilador pode realizar sua tarefa, que
a criao do programa objeto.
O programa objeto reflete, 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.
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 especificadas 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.
Prximo passo
Vamos definir uma linguagem de programao que ser
usada como estudo de caso durante o curso.
Ver Captulo 2 do livro.