analise_sint tica_1

Upload: diogocabral

Post on 17-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 Analise_Sinttica_1

    1/40

    ANLISE SINTTICAProf. Alexandre Paes dos Santos

    Arapiraca03/11/2011

    1

  • 7/23/2019 Analise_Sinttica_1

    2/40

    Introduo

    A sintaxe das Linguagens de programao podeser descritas pelas:Gramticas Livres de Contexto;

    BNF(Forma de Backus-Naur);

  • 7/23/2019 Analise_Sinttica_1

    3/40

    Introduo

    As gramticas oferecem vantagens: Especificao precisa e fcil;

    Possibilidade de construir automaticamente um

    analisador sinttico ( Analisador Gramatical, Parser); Benefcio adicional: Revelao de ambigidades sintticas

    Uma gramtica bem projetada:

    til para a traduo correta do programa-fonte Deteco de Erros;

    Facilidade para incluir tarefas adicionais

  • 7/23/2019 Analise_Sinttica_1

    4/40

    Papel do Analisador Sinttico

    Obtm um cadeia de token proveniente doanalisador lxico;

    Verifica se a mesma pode ser gerada pelagramtica da linguagem fonte;

    Espera-se a revelao de erros sintticos inteligveis;

  • 7/23/2019 Analise_Sinttica_1

    5/40

    Papel do Analisador Sinttico

    Existem 3 tipos de analisadores sintticos:Mtodos universais(Algoritmo Coker-Younger-Kasami e

    o Algoritmo de Early) ;

    Mtodo Top-down;Mtodo Botton-up;

    Outras pequenas atividades: Coletar informaes sobre os tokens na tabela de smbolos; Realizao de Verificao de tipos; Gerar cdigo intermedirio

    Em ambos os casos a rvores varrida daesquerda para a direita um smbolo decada vez;Trabalham somente em uma subclase degramticas:

    LL e LR

  • 7/23/2019 Analise_Sinttica_1

    6/40

    Tratamento de Erros Sintticos

    Tipos de Erros: Lxicos: errar a grafia de um identificador, palavra-

    chave ou operador;

    Sinttico: expresso aritmtica com os parnteses nobalanceados;

    Semntico: operador aplicar a um operandoincompatvel;

    Lgico: chamada infinitamente recursiva;

  • 7/23/2019 Analise_Sinttica_1

    7/40

    Tratamento de Erros Sintticos

    Boa parte da deteco e recuperao dos erros deum compilador se concentra na anlise sinttica;

    Dificuldade de deteco de erros lgicos e

    semnticos;

  • 7/23/2019 Analise_Sinttica_1

    8/40

    Tratamento de Erros Sintticos

    Tarefa de um tratador de erros num analisadorsinttico: Revelar a presena de erros;

    Recuperar-se dos erros rapidamente para poderdetectar erros subseqentes;

    Preocupao com o no retardo

    Adivinhao quanto ao que o programador tinha emmente;

    Mtodos LL e LR

  • 7/23/2019 Analise_Sinttica_1

    9/40

    Tratamento de Erros Sintticos

    Estatsticas: 60% dos programas estavam semntica e sintaticamente

    corretos;

    80% dos enunciados com erros possuam apenas um erro;

    13% dois erros;

    A maioria possua erros triviais: erros em um nico token;

    60% erros de pontuao

    20% operadores e operandos;

    15% palavras-chaves;

    5% dos erros restantes de outros tipos;

    O grosso dos erros giravam em torno do ponto-e-vrgula

    Ripley e Druseikis

  • 7/23/2019 Analise_Sinttica_1

    10/40

    Tratamento de Erros Sintticos Erros concretos:

    Usar uma vrgula em lugar de ponto-e-vrgula na lista de argumentos de umafuno(linha 4);

    Omitir o ponto-e-vrgula no fim da linha(linha 4);

    Inserir um ponto-e-vrgula estranho ao fim de uma linha antes do else(linha 7);

    Emisso de um alerta apontando a construo ilegal;

  • 7/23/2019 Analise_Sinttica_1

    11/40

    Tratamento de Erros Sintticos

    Como deveria um tratador de erros reportar apresena de um erro? No mnimo deve informar o local do erro;

    Imprimir a linha;

    Emisso de mensagem;

    Como se recuperar? No adequado encerrar logo aps a deteco de erros;

    Erros esprios; Erros semnticos esprios;

    Exemplo: zapno definido;

  • 7/23/2019 Analise_Sinttica_1

    12/40

    Tratamento de Erros Sintticos

    Inibio de erros prximo ao fluxo de entrada;

    Cdigo fonte de uma linguagem tentando sercompilador em um compilador diferente;

    A recuperao extensa de erros no compensa o seucusto;

  • 7/23/2019 Analise_Sinttica_1

    13/40

    Estratgias de Recuperao de Erros

    Modalidade desespero;

    Nvel de frase;

    Produes de erros;

    Correo global;

  • 7/23/2019 Analise_Sinttica_1

    14/40

    Estratgias de Recuperao de Erros

    Modalidade desesperoMais simples;

    Descarte de smbolos de entrada, um de cada vez, at

    se encontrar um conjunto de tokens de sincronizao; Pula uma parte considervel da entrada sem verificar;

    Garantia de no entrar num loop infinito;

    Erros mltiplos num nico enunciado raros;

  • 7/23/2019 Analise_Sinttica_1

    15/40

    Estratgias de Recuperao de Erros

    Nvel de frase: Correo local na entrada restante;

    Usado na anlise top-down;

  • 7/23/2019 Analise_Sinttica_1

    16/40

    Estratgias de Recuperao de Erros

    Produes de erros: Aumentar a gramtica com as produes que gerem

    construes ilegais;

    Gerao de diagnsticos mais apropriados;

  • 7/23/2019 Analise_Sinttica_1

    17/40

    Estratgias de Recuperao de Erros

    Correo global: rvores X e Y

  • 7/23/2019 Analise_Sinttica_1

    18/40

    Gramticas Livres de Contexto

    Uma gramtica descreve naturalmente a estruturahierrquica de muitas construes das linguagensde programao

  • 7/23/2019 Analise_Sinttica_1

    19/40

    Gramticas Livres de Contexto

    Possui os seguintes componentes:1. Um conjunto de tokens como smbolos terminais;

    2. Um conjunto de no terminais;

    3. Um conjunto de produes: Consiste em:

    Um no terminal chamado de lado esquerdo da produo; Uma seta; Uma seqncia de tokens e/ou no terminais chamado de lado

    direito da produo;4. Um designao a um dos no-terminais como smbolo de

    partida

  • 7/23/2019 Analise_Sinttica_1

    20/40

    Gramticas Livres de Contexto

    1. Token ser sinnimo de terminalEx: if,then eelse

    2. Os no terminais so variveis sintticas que denotamcadeia de caracteres

    Ex: cmde expr;3. Numa gramtica, um no terminal distinguido como

    smbolo de partida, e o conjunto que o mesmo denota a linguagem definida pela linguagem;

    4. As produes de uma gramtica especificam a formapela qual os terminais e no terminais pode sercombinados a fim de formar cadeias;

  • 7/23/2019 Analise_Sinttica_1

    21/40

    Gramticas Livres de Contexto

    Ex.: Define expresses aritmticas

    Smbolos terminais:

    Smbolos no-terminais

  • 7/23/2019 Analise_Sinttica_1

    22/40

    Gramticas Livres de Contexto

    Convenes Notacionais:

  • 7/23/2019 Analise_Sinttica_1

    23/40

    Gramticas Livres de Contexto

    Convenes Notacionais:

  • 7/23/2019 Analise_Sinttica_1

    24/40

    Gramticas Livres de Contexto

    Simplificando:

  • 7/23/2019 Analise_Sinttica_1

    25/40

    Gramticas Livres de Contexto

    Derivaes: Um produo ser tratada como uma regra de

    reescrita, na qual o no terminal esquerda

    substitudo pela cadeia do lado direito da produo; Ex.:

    E deriva - E

    Derivao de(id)

  • 7/23/2019 Analise_Sinttica_1

    26/40

    Gramticas Livres de Contexto

    Dizemos que

    Se

    E e forem cadeias arbitrrias de smbolos

    gramaticais

    Se

    Dizemos que

  • 7/23/2019 Analise_Sinttica_1

    27/40

    Gramticas Livres de Contexto

    O smbolo significa deriva em um passo

    O smbolo quer dizer deriva em zero ou mais

    passos

    Assim sendo:

    O smbolo quer dizer deriva em zero ou mais

    passos

  • 7/23/2019 Analise_Sinttica_1

    28/40

    Gramticas Livres de Contexto

    Podemos usar para definir L(G) , a linguagemgerado por G

    As cadeias em L(G) s podem conter smbolos

    terminais de G; Dizemos que uma cadeia de terminais w est em

    L(G) se e somente se

    A cadeia w chamada de sentena de G

    +

  • 7/23/2019 Analise_Sinttica_1

    29/40

    Gramticas Livres de Contexto

    Se onde pode conter no terminais,dizemos ento de uma forma sentencial de G;

    Uma sentena uma forma sentencial despida deno terminais

  • 7/23/2019 Analise_Sinttica_1

    30/40

    Gramticas Livres de Contexto

    A cadeia(id+id) uma sentena da gramticaanterior porque existe a derivao:

    So formas sentenciais:

    Escrevemos para indicar que(id+id) pode ser derivada a partir de E

  • 7/23/2019 Analise_Sinttica_1

    31/40

    Gramticas Livres de Contexto

    Outras possibilidades para:

    Alternativa:

    Porm, para entender como os AS funcionam, precisamosconsiderar derivaes nas quaissomente o no-terminal mais

    esquerda em qualquer forma no sentencial seja substitudo acada passo;

    TAIS DERIVAES SO DITAS MAISA ESQUERDA

  • 7/23/2019 Analise_Sinttica_1

    32/40

    Gramticas Livres de Contexto

    Se por um passo no qual o no-terminalmais a esquerda de substitudo, escrevemos

  • 7/23/2019 Analise_Sinttica_1

    33/40

    Gramticas Livres de Contexto

    rvores de Derivao

    rvore de Derivao para(id+id)

    Construindo arvore gramatical

  • 7/23/2019 Analise_Sinttica_1

    34/40

    Gramticas Livres de Contexto

    A sentena id+id*id possui duas derivaes

  • 7/23/2019 Analise_Sinttica_1

    35/40

    Gramticas Livres de Contexto

    Ambigidade Uma gramtica ambgua quando produz mais de

    uma derivao mais esquerda ou mais direita para

    a mesma sentena;

  • 7/23/2019 Analise_Sinttica_1

    36/40

    Escrevendo uma Gramtica

    Gramticas adequadas a anlise top-down;

    Expresses Regulares vs. Gramticas Livres deContexto

    Expresso regular (a|b)*abb

    q1 q2 q3qf

    a b b

    a

    b

    q1 q2 q3qf

    a b b

    b a

    a

    a

    b

  • 7/23/2019 Analise_Sinttica_1

    37/40

    Eliminando a ambigidade

  • 7/23/2019 Analise_Sinttica_1

    38/40

    Eliminando a ambigidade(1)

    (2)

    (1)

    (2)

    (1)

    (2)

  • 7/23/2019 Analise_Sinttica_1

    39/40

    Eliminando a ambigidade

  • 7/23/2019 Analise_Sinttica_1

    40/40

    Eliminao de Recurso Esquerda