Escolar Documentos
Profissional Documentos
Cultura Documentos
ayslanyawanderley@fiponline.edu.br
1
Métodos de Análise
Compiladores ayslanyawanderley@fiponline.edu.br 2
Métodos de Análise
• Os métodos Top-Down e Bottom-Up mais eficientes e
interessantes são determinísticos (O(n)).
Compiladores ayslanyawanderley@fiponline.edu.br 3
Análise Sintática Descendente
• Uma tentativa de construir uma árvore de derivação da
esquerda para a direita;
Compiladores ayslanyawanderley@fiponline.edu.br 4
Métodos de Análise Descendentes
• Veremos 3 estratégias de A.S.D. :
• Parsers Preditivos:
– Com procedimentos recursivos: são mais adequados para serem escritos
manualmente; um símbolo look ahead determina a produção a ser
escolhida.
– Dirigidos por tabela: fazem uso de uma pilha explícita para guardar o lado
direito das produções; mais adequado para serem implementados
automaticamente pela pré-computação da Tabela de Análise
Compiladores ayslanyawanderley@fiponline.edu.br 5
A. S. D. recursiva com retrocesso
• Analisador sintático com retrocesso
– Testa diferentes possibilidades de análise sintática de
entrada, retrocedendo se alguma possibilidade
falhar.
– São mais poderosos.
– São mais lentos.
Compiladores ayslanyawanderley@fiponline.edu.br 6
A. S. D. recursiva com retrocesso
• Consiste em um conjunto de procedimentos, um para cada não
terminal da gramática.
S → a | [L]
L → S;L|S
Compiladores ayslanyawanderley@fiponline.edu.br 9
A. S. D. recursiva com retrocesso
• Reconhecimento da sentença [ a ]
Compiladores ayslanyawanderley@fiponline.edu.br 10
A. S. D. recursiva com retrocesso
• Reconhecimento da sentença [ a ]
Compiladores ayslanyawanderley@fiponline.edu.br 11
A. S. D. recursiva com retrocesso
• Exercício: Considere a gramática:
S → cAd
A → ab | a
Compiladores ayslanyawanderley@fiponline.edu.br 12
Funções First e Follow
• Funções associativas a uma gramática G.
Compiladores ayslanyawanderley@fiponline.edu.br 13
Funções First e Follow
• Funções que auxiliam a construção de analisadores
sintáticos;
• First
– Define o conjunto de símbolos que iniciam derivações a partir
de uma sequência de símbolos terminais e não terminais
– c está em First(A)
• Follow
– Define o conjunto de símbolos que se pode seguir a derivar
após um dado símbolo não terminal
– a está em Follow(A) ... :
Compiladores ayslanyawanderley@fiponline.edu.br 14
Funções First e Follow
– Se houver uma produção A::= αB, ou uma produção A::= αBβ, onde
o FIRST(β) contém ε, então inclua o FOLLOW(A) em
FOLLOW(B)
Compiladores ayslanyawanderley@fiponline.edu.br 17
Exemplo
• Seja a Gramática
S → XYZ
X → aXb | ε
Y → cYZcX | d
Z → eZYe | f
Compiladores ayslanyawanderley@fiponline.edu.br 18
Exercícios
• Exercícios: A partir da gramática a seguir:
S > cAd
A>b|a
Calcule:
First(S):
First(A):
Follow(S):
Follow(A):
Compiladores ayslanyawanderley@fiponline.edu.br 19
Exercícios
• Exercícios: A partir da gramática a seguir:
Calcule:
First(ATRIB):
First(ITER):
First(COND):
First(COMAND):
Compiladores ayslanyawanderley@fiponline.edu.br 20
A. S. D. Preditiva Recursiva
Compiladores ayslanyawanderley@fiponline.edu.br 21
A. S. D. Preditiva Recursiva
• Exemplo:
COMANDO → if EXPR then COMANDO | while EXPR do
COMANDO | repeat LISTA until EXPR | id := EXPR
Compiladores ayslanyawanderley@fiponline.edu.br 22
A. S. D. Preditiva Recursiva
• Ainda assim continuaria sendo possível determinar
univocamente a produção a ser usada.
Compiladores ayslanyawanderley@fiponline.edu.br 23
A. S. D. Preditiva Recursiva
• Dado um símbolo não terminal A definido por várias
alternativas.
Compiladores ayslanyawanderley@fiponline.edu.br 24
A. S. D. Preditiva Recursiva
Implementação do recursivo preditivo
Compiladores ayslanyawanderley@fiponline.edu.br 25
A. S. D. Preditiva Recursiva
Exigem que:
Compiladores ayslanyawanderley@fiponline.edu.br 26
A. S. D. Preditiva Tabular
• A A.S.D. Preditiva Tabular ou Análise Sintática LL,
implementa o descendente recursivo utilizando
explicitamente uma pilha.
• A ideia é a seguinte:
– O analisador sintático recebe uma sequência de entrada (a
sentença a ser analisada);
– Manipula uma estrutura de dados tipo pilha (onde monta a
ADS);
– Para cada símbolo de entrada, consulta uma tabela de análise
sintática para saber que regra aplicar;
– Emite uma sequência de saída (regras que estão sendo
aplicadas).
Compiladores ayslanyawanderley@fiponline.edu.br 27
A. S. D. Preditiva Tabular
• Entrada do analisador:
– Sentença a ser analisada, seguida por um símbolo delimitador
($).
– Pilha: contém uma sequência de símbolos da gramática,
precedida pelo indicador de base de pilha ($).
– Tabela de análise sintática: é uma matriz M[A, a], onde 'A' é
um não terminal e 'a' é um terminal ou cifrão ($).
• Saída do analisador:
– Constará das produções aplicadas a partir do símbolo inicial
(S), na geração da sentença.
Compiladores ayslanyawanderley@fiponline.edu.br 28
Algoritmo para construir a tabela
• Calcular os conjuntos First e Follow
Compiladores ayslanyawanderley@fiponline.edu.br 29
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 30
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 31
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não-terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 32
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não-terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 33
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não-terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 34
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não-terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 35
A tabela preditiva M(X, t)
• Tabela Bi-dimensional:
– Dimensão 1: Não-terminal X
– Dimensão 2: Caractere da entrada (terminal) t
– A entrada (X,t) contém a regra de produção a aplicar
Compiladores ayslanyawanderley@fiponline.edu.br 36
Funcionamento do parser
• Seja X o símbolo no topo da pilha
• Seja a o símbolo de entrada (terminal!) a analisar
Compiladores ayslanyawanderley@fiponline.edu.br 38
Exercício
FIRST(E) = FIRST(T) = FIRST(F) = {¬, id}
E → T E’ FIRST(E’) = {v, ε }
E’ → v T E’ | ε FIRST(T’) = {&, ε}
T → F T’ FOLLOW(E) = {$}
T’ → & F T’ | ε FOLLOW(E’) = {$}
FOLLOW(T) = {v,$}
F → ¬ F | id FOLLOW(T’) = {v,$}
FOLLOW(F) = {&, v, $}
Compiladores ayslanyawanderley@fiponline.edu.br 40