analise_sint tica_1
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