Análise Sintática. Instituto Federal de Santa Catarina Campus Lages

Texto

(1)

Instituto Federal de Santa Catarina Campus Lages

Análise Sintática

Curso: Ciência da Computação Disciplina: Compiladores

(2)

Análise Sintática

Leitura recomendada:

AHO, A.; SETHI, R.; ULMAN, J. D. Compiladores:

princípios, técnicas e ferramentas. 2. ed. Rio de Janeiro:

Pearson Prentice Hall, 2008. Capítulo 4 (4.5, 4.5.1 ao 4.5.3)

Leitura complementar:

AHO, A.; SETHI, R.; ULMAN, J. D. Compiladores:

princípios, técnicas e ferramentas. 2. ed. Rio de Janeiro:

Pearson Prentice Hall, 2008. Capítulo 4 (4.5.4 e 4.6)

COOPER, K. D.; TORCZON, L.; Construindo

(3)

Análise Sintática

Objetivos de aprendizagem:

Compreender o funcionamento da análise sintática

ascendente;

Conceituar handle e analisador LR;

Utilizar um analisador LR para analisar um determinado

código.

(4)

Análise Sintática

O analisador sintático recebe a lista de tokens do analisador léxico e verifica se esta cadeia pertence a linguagem

gerada pela gramática.

A ordem de construção da árvore de derivação pode ser da raiz para as folhas (análise descendente) ou vice versa (análise ascendente).

(5)

Análise Sintática

Análise sintática ascendente:

Sentido: folhas para a raiz;

Utiliza redução no lugar da derivação;

Reduz uma cadeia (sequência de tokens) pelo não terminal correspondente;

Visa reduzir a cadeia completa no símbolo de partida da gramática;

Produz a derivação mais a direita;

Principais questões: quando realizar a redução e qual produção utilizar.

(6)

Análise Sintática

Dada a gramática ao lado, o comando id * id geraria a seguinte

árvore por meio de reduções.

(7)

Análise Sintática

O handle de uma cadeia é uma subcadeia igual ao corpo de uma

produção cuja redução representa o passo inverso de uma derivação à direita.

(8)

Análise Sintática

Dada a gramática abaixo, elabore a árvore de análise sintática usando o método ascendente para o seguinte comando: (id + id) * id

(9)

Análise Sintática

A análise shift-reduce utiliza uma pilha para simular as reduções na árvore.

(10)

Análise Sintática

A análise ascendente pode ser

implementada por analisadores LR(k):

L - Leitura dos caracteres da esquerda para a direita;

R - Construção da árvores com as derivações mais a direita;

K – quantos símbolos a frente precisam ser analisados para as decisões da análise (0 ou 1 são suficientes)

(11)

Análise Sintática

Por que usar analisadores LR?

Nem toda GLC é LR, mas elas reconhecem

todas as construções utilizadas em linguagens de programação;

Método de shitf-reduce sem retrocesso com boa eficiência em termos de tempo e espaço;

Gramáticas LR são mais gerais que as LL;

Existem geradores automáticos de analisadores LR -Yacc.

São mais difíceis de implementar “à mão”.

(12)

Análise Sintática

Como o analisador escolhe a ação a ser tomada (transfere ou reduz)?

Um autômato é utilizado para indicar o estado que a análise se encontra e

determinar a próxima ação;

Este autômato é construído com o uso das funções de fechamento (Closure) e

Transição (Goto);

Uma gramática estendida deve ser criada.

(13)

Análise Sintática

Gramática estendida

Conjunto de itens

indicando o estado da análise.

(14)
(15)

Análise Sintática

(16)

Análise Sintática

(17)

Análise Sintática

Entrada: cadeia a ser analisada (lista de tokens).

Pilha: estados do autômato, que estão associados aos símbolos da gramática.

Tabela de análise:

Action – Ação a ser executada (empilhar, reduzir, aceitar ou erro);

Goto – Define o próximo estado do autômato.

(18)

Análise Sintática

(19)

Análise Sintática

(20)

Análise Sintática

(21)

Análise Sintática

(22)

Análise Sintática

Objetivos de aprendizagem:

Compreender o funcionamento da análise sintática

ascendente;

Conceituar handle e analisador LR;

Utilizar um analisador LR para analisar um determinado

Imagem

Referências

temas relacionados :