Click here to load reader
View
226
Download
5
Embed Size (px)
Faculdade Pernambuca - FAPE
Compiladores
Abril/2007
Conceitos
Uma linguagem de programao pode ser definida pela descrio da aparncia de seus programas (sintaxe) e do que os mesmos significam (semntica).
Para especificar a sintaxe da linguagem usamos gramticas livres de contexto (gramtica).
Ela tambm usada para guiar a traduo de programas.A compilao orientada por gramtica conhecida como traduo dirigida pela sintaxe.
Conceitos
Analisador LxicoTradutorDirigido pelaSintaxeFluxo de Caracteres de entradaFluxo de TokensRepresentao IntermediriaEstrutura da Vanguarda de nosso Compilador
Conceitos
Definio da Sintaxe
Uma gramtica descreve naturalmente a estrutura hierrquica de muitas construes das linguagens de programao. Exemplo de if-else em C:
comando em C: if (expresso) comando else comando
Regra de produo: cmd -> if (expr) cmd else cmd
( -> significa poder ter a forma ou produz)
Conceitos
Definio da Sintaxe
If-else ( ) so tokensExpr e cmd Representam sequncias de tokens e so chamados no terminais.
Uma gramtica livre de contexto possui quatro componentes:Um conjunto de tokens, conhecidos como smbolos terminais.Um conjunto de no-terminais.Um conjunto de produesUma designao a um dos no-terminais como o smbolo de partida.
Conceitos
Definio da Sintaxe
Produes consistem em um no-terminal, chamado de lado esquerdo da produo, uma seta e uma sequncia de tokens e/ou no terminais, chamados de lado direito da produo.
As gramticas so especificadas pela listagem de suas produes onde a primeira contm o smbolo de partida.
Assumimos que dgitos, sinas (=, +, - , etc), palavras reservadas sejam terminais.
Conceitos
Definio da Sintaxe
As produes com o mesmo no terminal a esquerda podem ser agrupadas. Exemplo:
digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Exemplo 1:
Gramtica para descrever uma lista de dgitos separados por sinais de mais ou de menos.
Conceitos
Definio da Sintaxe
Produes:
lista -> lista + dgito | lista dgito | dgitodigito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Tokens: + - 0 1 2 ... 9Terminais: 0 1 2 ... 9No Terminais: lista e dgito
Uma cadeia de tokens uma sequncia de 0 ou mais tokens.
Conceitos
Definio da Sintaxe
Uma gramtica deriva cadeias comeando pelo smbolo de partida. As cadeias de tokens geradas formam a linguagem definida pela gramtica.
Exemplo de cadeia: 9 5 + 2
Pela gramtica anterior temos:a) 9 uma lista.b) 9 5 uma lista.c) 9 5 + 2 uma lista.
Conceitos
Exemplo 2:
Sequencia de comandos, separados por ponto e vrgula, encontrada nos blocos bengin-end de Pascal.
Blocl -> begin cmds_opcs endcmds_opcs -> lista_cmds | Elista_cmds -> lista_cmds; cmd | cmd
Conceitos
rvores Gramaticais
Uma rvore gramatical mostra como o smbolo de partida de uma gramtica deriva uma cadeia de uma linguagem.
Se um no terminal A possui uma produo A -> XYZ, ento uma rvore pode ter um n A com trs filhos. A / | \ X Y Z
Conceitos
rvores Gramaticais
Formalmente, dada uma gramtica livre de contexto, uma rvore gramatical possui as seguintes propriedades:A raiz rotulada pelo smbolo de partida.Cada folha rotulada por um token ou por E.Cada n interior rotulado por um no-terminal.Se A um no-terminal rotulando algum n interior e X1, x2, ... , Xn so os rtulos dos seus filhos, ento A ->X1X2,..,Xn uma produo.
Conceitos
rvores Gramaticais
lista lista dgito lista dgito
dgito 9 - 5 + 2rvore gramaticalpara 9 5 + 2
Conceitos
rvores Gramaticais
Na rvore anterior temos:lista Raiz rotulada lista (smbolo de partida).lista + dgito Filhos da raz.lista -> lista + dgito uma produo na gramtica.
As folhas da rvore gramatical, lidas da esquerda para a direita formam o produto da rvore, que a cadeia gerada ou derivada a partir do no-terminal raiz da rvore gramatical.
Conceitos
rvores Gramaticais
Outra definio da linguagem gerada por uma gramtica a de um conjunto de cadeias que podem ser representadas por alguma rvore gramatical.
O processo de encontrar uma rvore gramatical para uma dada cadeia de tokens chamado de anlise gramatical ou anlise sinttica daquela cadeia.
Conceitos
Ambigidade
importante observar que uma gramtica pode ter mais de uma rvore gramatical gerando uma dada cadeia de tokens. Tal gramtica dita ambgua.
Exemplo: basta encontrar uma cadeia de tokens que tenha mais de uma rvore gramatical.
Conceitos
Ambigidade
Gramtica ambgua:
Cadeia -> cadeia + cadeia | cadeia cadeia | cadeiaCadeia -> 0 | 1 | ... | 9
Ver exemplos:
Precisamos resolver a ambigidade das gramticas!
Conceitos
Ambigidade
cadeia cadeia
cadeia + cadeia cadeia - cadeia
cadeia - cadeia cadeia + cadeia
952952Duas rvores Gramaticais para 9-5+2
ConceitosAssociatividade dos Operadores
Convencionalmente, 9+5+2 equivalente a (9+5)+2 e 9-5-2 a (9-5)-2.Na maioria das linguagens os operadores +, -, * e / so associados esquerda.Exponenciao tem associao direita. Em C o operador de atribuio tem associao direita tambmdireita -> letra = direita | letraletra -> a | b | ... | z
ConceitosAssociatividade dos Operadores
Exemplo: a=b=c e 9 5 2
direita lista letra = direita lista - digito
a letra = direita lista - digito
letra digito
bc952rvore gramatical para operadores associativos esquerda e direita
Precedncia de Operadores
Para a expresso 9+5*2 existem duas possveis interpretaes para a mesma (9+5)*2 ou 9+(5*2)
* e / tem precedncia mais alta que + e
Sintaxe das expresses
Expr -> expr + termo | expr termo | termoTermo -> termo * fator | termo/fator | fator Fator -> digito | (expr)
Precedncia de Operadores
Sintaxe dos comandos
cmd -> id := expr | if expr then cmd | if expr then cmd else cmd | while expr do cmd | begin cmds_opcs end