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

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

CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Sintática Ascendente O Algoritmo inicia a leitura do programa fonte, da esquerda para a direita, varre as.

Apresentações semelhantes


Apresentação em tema: "CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Sintática Ascendente O Algoritmo inicia a leitura do programa fonte, da esquerda para a direita, varre as."— Transcrição da apresentação:

1 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 2. Procura-se decompor de forma que X 1 X 2...X n, existindo uma produção da forma X = X 1 X 2...X n, chegamos X O significado é associar ao não terminal X e as subárvores são as ocorrências de X 1 X 2...X n, que foram substituídas. Se X i é um terminal, a árvore associada será uma folha de rótulo X i. 3. Repete-se o passo anterior até que seja o símbolo inicial da gramática.

2 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Sintática Ascendente Problemas da Análise Ascendente: identificação da parte 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 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 2 - A -> a 3 - 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 - usando a primeira produção possível para S obtém-se a árvore: S c A d

9 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Descendente com Retrocesso Como c corresponde ao primeiro símbolo de, 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: c A d S 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Descendente Recursiva Precisamos saber, dado o símbolo de entrada e o não terminal A a ser expandido, qual das alternativas da produção A n é a única alternativa que deriva uma cadeia começando por Se uma alternativa de A é, e nenhuma das outras alternativas deriva da cadeia começando com, então podemos expandir A aceitando a entrada. O parser recursivo descendente é um conjunto de procedimentos recursivos, um para cada não terminal a ser derivado.

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

13 CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS 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 "CC 1 - ANÁLISE SINTÁTICA - FUNDAMENTOS Análise Sintática Ascendente O Algoritmo inicia a leitura do programa fonte, da esquerda para a direita, varre as."

Apresentações semelhantes


Anúncios Google