Click here to load reader

Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

  • View
    226

  • Download
    5

Embed Size (px)

Text of Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

  • 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

Search related