Beruflich Dokumente
Kultur Dokumente
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 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.
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 FONTE COMPILADOR PROGRAMA OBJETO
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 signicado 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 signicam
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
Analisador sinttico
O AL no se preocupa em vericar se a ordem em que os smbolos aparecem vlida ou no.
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.
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)
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) verica se os aspectos semnticos do programa esto corretos, ou seja, se no existem incoerncias quanto ao signicado das construes utilizadas pelo programador.
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.
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 vericado 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 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.
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.
Prximo passo
Vamos denir uma linguagem de programao que ser usada como estudo de caso durante o curso. Ver Captulo 2 do livro.