A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Análise Sintática Ascendente

Apresentações semelhantes


Apresentação em tema: "Análise Sintática Ascendente"— Transcrição da apresentação:

1 Análise Sintática Ascendente
O Algoritmo inicia a leitura do programa fonte, da esquerda para a direita, varre as diferentes hipóteses e obtém a árvore de derivação. É claro que a cadeia só é reconhecida quando atinge-se o símbolo inicial da gramática. Algoritmo: 1. Adotar a cadeia dada como valor inicial de a 2. Procura-se decompor a de forma que a = bX1X2...Xng, existindo uma produção da forma X = X1X2...Xn, chegamos a = bXg. O significado é associar ao não terminal X e as subárvores são as ocorrências de X1X2...Xn, que foram substituídas. Se Xi é um terminal, a árvore associada será uma folha de rótulo Xi. 3. Repete-se o passo anterior até que a seja o símbolo inicial da gramática.

2 Análise Sintática Ascendente
Exemplo: Seja a gramática de Expresssões, anteriormente definida: 1. E  T 2. | E + T 3. |T Supondo a cadeia a + b * a, teríamos que aplicar reduções até obter a cadeia de entrada. 4. T  F 5. | T * F 6. F  a 7. | b 8. | (E)

3 Análise Sintática Ascendente
Observações: Procuramos as reduções mais à esquerda, obtém-se as derivações mais à direita que formam a cadeia; Nem sempre as reduções são triviais e levam à uma sequência válida; Considerando o item anterior, o algoritmo deveria varrer todas as hipóteses possíveis, retrocedendo, se necessário. O algoritmo ideal sabe qual redução escolher - aplicável a um número menor de gramáticas.

4 Análise Sintática Ascendente
Problemas da Análise Ascendente:  identificação da parte a a ser reduzida;  identificação da produção a ser associada adequadamente à redução. Assim, em uma gramática onde existam produções do tipo A  b B  b, o programa tem de saber qual produção deve ser aplicada para redução  há algoritmos que usam o mecanismo de redução diferente.

5 Análise Sintática Descendente
Princípios Básicos: - Parte-se do axioma da gramática, para chegar à sentença a ser verificada: se esta sentença estiver correta do ponto de vista gramatical, ela é reconhecida; - Eqüivale à construir a árvore de derivação para a sentença, a partir da raiz e obter nas folhas os símbolos da sentença; - Quando as folhas representam os símbolos terminais relativos à cadeia de entrada, a mesma foi reconhecida. No curso: - Análise Descendente com Retrocesso - Análise Descendente Recursiva - Análise LL(k)

6 Análise Descendente com Retrocesso
Um dos primeiros métodos para Análise Sintática  Apresenta grandes ineficiências quanto à utilização de memória e tempo O processo é tipicamente exploratório: tenta-se a derivação mais à esquerda para obter uma dada cadeia de entrada, através da exploração: no caso de haver várias regras com o mesmo lado esquerdo e diferentes lados direitos, ele escolhe uma e continua a análise; caso tenha escolhido mal, ele seleciona outra possibilidade e continua o processo O processo termina quando não existem mais alternativas ou quando a cadeia foi reconhecida.

7 Análise Descendente com Retrocesso
Suponhamos a gramática dada por G = (Vn, Vt, {S}, P) onde Vn = {S, A, B}, Vt = {a, b, c, d}, onde P é dado por: 1 - S -> A A -> a A -> aB Quais seriam as tentativas executadas pelo parser para reconhecer a cadeia abcd ? Obs: a partir do exemplo, observa-se que o problema passa a ser como fazer para evitar retrocessos na análise: conhecido o próximo símbolo da cadeia e qual o não terminal a ser derivado, determinar exatamente qual regra da Gramática deve ser aplicada. 4 - B -> bB 5 - B -> cB 6 - B -> d

8 Análise Descendente com Retrocesso
Suponhamos a gramática dada por G = (Vn, Vt, {S}, P) onde Vn = {S, A}, Vt = {a, b, c, d}, onde P é dado por: 1 - S -> cAd 2 - A -> ab 3 - A -> a O processo de construção top-down para a cadeia ‘cad’ seria: - fazemos S como nossa árvore inicial, c é o primeiro símbolo de a - usando a primeira produção possível para S obtém-se a árvore: S c A d

9 Análise Descendente com Retrocesso
Como c corresponde ao primeiro símbolo de a, então, uma posição é avançada, ficando o ponteiro apontando para ‘a’, e o não terminal ‘A’. A tentativa abaixo pode ser efetuada: S c A d a b Agora, na leitura do próximo símbolo ‘d’ não há reconhecimento, deve-se voltar ao símbolo A e tentar nova regra de produção que permita o reconhecimento, e assim, sucessivamente.

10 Análise Descendente com Retrocesso
Observações: - possibilidade de loop infinito para produções com recursão à esquerda - backtracking: uma seqüência de expressões errôneas, capaz de gerar uma má cadeia, leva a uma nova tentativa e à perda do efeito semântico da tentativa errada; - a ordem das substituições podem afetar a aceitação da cadeia, por exemplo, no caso anterior, se tivéssemos tentado expandir A para a e reconhecido A, o parser falharia na tentativa de reconhecimento.

11 Análise Descendente Recursiva
Precisamos saber, dado o símbolo de entrada a e o não terminal A a ser expandido, qual das alternativas da produção A  a1| a2| ... |an é a única alternativa que deriva uma cadeia começando por a Se uma alternativa de A é l, e nenhuma das outras alternativas deriva da cadeia começando com a, então podemos expandir A  l aceitando a entrada a. O parser recursivo descendente é um conjunto de procedimentos recursivos, um para cada não terminal a ser derivado.

12 Análise Descendente Recursiva
Restrições a este tipo de análise: - gramáticas não recursivas à esquerda, com produções A Aa; - não possuindo mais que um lado direito de um não terminal começando por um mesmo terminal; Exemplo: < programa> := <declarações> <bloco> . procedure programa; begin declarações; bloco; lexico(x); if (x = ‘.’) then write (“Programa Sintaticamente Correto”; else write (“Erro de Sintaxe”); end.

13 Análise Descendente Recursiva - Implementação
Método: Diagrama Sintático -> Procedimento Conseqüência: 1 Gramática -> 1 Programa Não-terminal -> Grafo -> Procedimento Exemplo: Seja a gramática dada por: S -> aAd A -> cA | eB B -> f | g


Carregar ppt "Análise Sintática Ascendente"

Apresentações semelhantes


Anúncios Google