Anda di halaman 1dari 40

1

ANLISE SINTTICA
Prof. Alexandre Paes dos Santos
Arapiraca 03/11/2011

Introduo

A sintaxe das Linguagens de programao pode


ser descritas pelas:
Gramticas

Livres de Contexto;
BNF(Forma de Backus-Naur);

Introduo

As gramticas oferecem vantagens:


Especificao

precisa e fcil;
Possibilidade de construir automaticamente um
analisador sinttico ( Analisador Gramatical, Parser);
Benefcio adicional:
Revelao

Uma

de ambigidades sintticas

gramtica bem projetada:

til

para a traduo correta do programa-fonte


Deteco de Erros;
Facilidade

para incluir tarefas adicionais

Papel do Analisador Sinttico

Obtm um cadeia de token proveniente do


analisador lxico;
Verifica se a mesma pode ser gerada pela
gramtica da linguagem fonte;
Espera-se a revelao de erros sintticos inteligveis;

Papel do Analisador Sinttico

Existem 3 tipos de analisadores sintticos:


Mtodos

universais(Algoritmo Coker-Younger-Kasami e
o Algoritmo de Early) ;
Em ambos os casos a rvores varrida da
Mtodo Top-down;
esquerda para a direita um smbolo de
Mtodo Botton-up;
cada vez;
Trabalham somente em uma subclase de
gramticas:
LL e LR
Outras

pequenas atividades:

Coletar informaes sobre os tokens na tabela de smbolos;


Realizao de Verificao de tipos;
Gerar cdigo intermedirio

Tratamento de Erros Sintticos

Tipos de Erros:
Lxicos:

errar a grafia de um identificador, palavrachave ou operador;


Sinttico: expresso aritmtica com os parnteses no
balanceados;
Semntico: operador aplicar a um operando
incompatvel;
Lgico: chamada infinitamente recursiva;

Tratamento de Erros Sintticos

Boa parte da deteco e recuperao dos erros de


um compilador se concentra na anlise sinttica;
Dificuldade de deteco de erros lgicos e
semnticos;

Tratamento de Erros Sintticos

Tarefa de um tratador de erros num analisador


sinttico:
Revelar

a presena de erros;
Recuperar-se dos erros rapidamente para poder
detectar erros subseqentes;
Preocupao com o no retardo
Adivinhao quanto ao que o programador tinha em
mente;
Mtodos LL e LR

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

Tratamento de Erros Sintticos

Erros concretos:

Usar uma vrgula em lugar de ponto-e-vrgula na lista de argumentos de uma


funo(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;

Tratamento de Erros Sintticos

Como deveria um tratador de erros reportar a


presena 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: zap no definido;

Tratamento de Erros Sintticos

Inibio de erros prximo ao fluxo de entrada;


Cdigo fonte de uma linguagem tentando ser
compilador em um compilador diferente;
A

recuperao extensa de erros no compensa o seu


custo;

Estratgias de Recuperao de Erros

Modalidade desespero;
Nvel de frase;
Produes de erros;
Correo global;

Estratgias de Recuperao de Erros

Modalidade desespero
Mais

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;

Estratgias de Recuperao de Erros

Nvel de frase:
Correo

local na entrada restante;


Usado na anlise top-down;

Estratgias de Recuperao de Erros

Produes de erros:
Aumentar

a gramtica com as produes que gerem


construes ilegais;
Gerao de diagnsticos mais apropriados;

Estratgias de Recuperao de Erros

Correo global:
rvores

XeY

Gramticas Livres de Contexto

Uma gramtica descreve naturalmente a estrutura


hierrquica de muitas construes das linguagens
de programao

Gramticas Livres de Contexto

Possui os seguintes componentes:


1.
2.
3.

Um conjunto de tokens como smbolos terminais;


Um conjunto de no terminais;
Um conjunto de produes:

Consiste em:

4.

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;

Um designao a um dos no-terminais como smbolo de


partida

Gramticas Livres de Contexto


1.

Token ser sinnimo de terminal


Ex: if, then e else

2.

Os no terminais so variveis sintticas que denotam


cadeia de caracteres
Ex: cmd e expr;

3.

4.

Numa gramtica, um no terminal distinguido como


smbolo de partida, e o conjunto que o mesmo denota
a linguagem definida pela linguagem;
As produes de uma gramtica especificam a forma
pela qual os terminais e no terminais pode ser
combinados a fim de formar cadeias;

Gramticas Livres de Contexto

Ex.: Define expresses aritmticas

Smbolos terminais:

Smbolos no-terminais

Gramticas Livres de Contexto

Convenes Notacionais:

Gramticas Livres de Contexto

Convenes Notacionais:

Gramticas Livres de Contexto

Simplificando:

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)

Gramticas Livres de Contexto


Dizemos que
Se
E e forem cadeias arbitrrias de smbolos
gramaticais
Se
Dizemos que

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
passos

quer dizer deriva em zero ou mais

Gramticas Livres de Contexto

Podemos usar
para definir L(G) , a linguagem
gerado 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

Gramticas Livres de Contexto

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

Gramticas Livres de Contexto

A cadeia (id+id) uma sentena da gramtica


anterior porque existe a derivao:

So formas sentenciais:

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

Gramticas Livres de Contexto

Outras possibilidades para:

Alternativa:

Porm, para entender como os AS funcionam, precisamos


considerar derivaes nas quais somente o no-terminal mais
esquerda em qualquer forma no sentencial seja substitudo a
cada passo;
TAIS DERIVAES SO DITAS MAIS A ESQUERDA

Gramticas Livres de Contexto

Se por um passo no qual o no-terminal


mais a esquerda de substitudo, escrevemos

Gramticas Livres de Contexto

rvores de Derivao

rvore de Derivao para (id+id)

Construindo a
rvore gramatical

Gramticas Livres de Contexto

A sentena id+id*id possui duas derivaes

Gramticas Livres de Contexto

Ambigidade
Uma

gramtica ambgua quando produz mais de


uma derivao mais esquerda ou mais direita para
a mesma sentena;

Escrevendo uma Gramtica

Gramticas adequadas a anlise top-down;


Expresses Regulares vs. Gramticas Livres de
Contexto
Expresso

regular (a|b)*abb

b
b

q1

q2

q3

q
f

q1

a
a

q2

q3

a
b

q
f

Eliminando a ambigidade

Eliminando a ambigidade
(1)

(1)

(2)

(2)

(1)

(2)

Eliminando a ambigidade

Eliminao de Recurso Esquerda

Anda mungkin juga menyukai