



























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Este documento explica o processo de análise sintática descendente não recursiva (asd) para gramáticas ll(1), incluindo passos para construção de grafos sintáticos, programa principal e procedimento, e solução de ambiguidade. O documento também inclui um exercício para reconhecer uma cadeia de símbolos.
Tipologia: Notas de aula
1 / 35
Esta página não é visível na pré-visualização
Não perca as partes importantes!




























Este material é baseado nos materiais de autoria da profa. V. Feltrim
ASD preditiva Gramáticas LL(1) Dado um único símbolo da cadeia de entrada, sabe-seque regra da gramática aplicar Restrições: sem recursividade à esquerda; para um nãoterminal, não há regras que derivem o mesmo símboloterminal como primeiro símbolo da cadeia ASD preditiva recursiva Regras gramaticais grafos sintáticos procedimentos recursivos
Passo 1: a gramática é LL(1)? Se não,transforme-a ::= ::= + | λ ::= a | b
Passo 1: a gramática é LL(1)? Se não,transforme-a ::= ::= + | λ ::= a | b sim, é LL(1) G r a m á t i c a s L L ( 1 ) D a d o u m ú n ic o s ím b o lo d a c a d e ia d e e n tra d a , s a b e -s e q u e re g ra d a g ra m á tic a a p lic a r R e s triç õ e s : s e m re c u rs iv id a d e à e s q u e rd a ; p a ra u m n ã o te rm in a l, n ã o h á re g ra s q u e d e riv e m o m e s m o s ím b o lo te rm in a l c o m o p rim e iro s ím b o lo d a c a d e ia
Passo 2: construa os grafos sintáticos ::= ::= + | λ ::= a | b E T E’ E E’
T a b É possível reduzir?
Passo 2: construa os grafos sintáticos ::= ::= + | λ ::= a | b E
Passo 3: construa o programa principal e o procedimento para E E
Alternativa para os procedimentos recursivos Gramáticas LL(1) O que é a recursividade? Como eliminá-la?
início da pilha (delimitador)
Funcionamento Um símbolo não terminal a ser expandido éempilhado ::= ::= + | λ ::= a | b E $ Pilha topo po
Ao expandir um não terminal no topo da pilha, ele édesempilhado e seu lado direito da regra gramatical éempilhado (em sentido inverso) para expansão O sentido inverso garante a ordem natural de expansão daesquerda para a direita ::= ::= + | λ ::= a | b E $ Pilha topo T E’ $ Pilha topo
Considere X o topo da pilha e ‘a’ o símbolo inicial da cadeiade entrada Possibilidades durante a análise:
Se X = a = $ , então o analisador termina a análise com sucesso
Se X = a $ , então o analisador desempilha X e consome o símbolo inicial da cadeia
Se X é não terminal, então o analisador procura na tabelasintática a regra de X que produz o símbolo inicial da cadeia eempilha seu lado direito (em sentido inverso)
Se X é terminal e é diferente de ‘a’ ou se X é não terminal e nãohá regra cuja derivação produza ‘a’, então ocorreu um erro
Algoritmo de análise sintática descendente não recursiva empilhe um símbolo delimitador ($) e o símbolo inicial da gramática;concatene ao final da cadeia um símbolo delimitador ($);faça p apontar para o primeiro símbolo da cadeia; repetir X = símbolo no topo da pilha; a = símbolo apontado por p ; se (X for um terminal ou o símbolo delimitador) então se X=a então desempilhar X;avançar p ; senão ERRO; senão /X é um não terminal/ se (existe na tabela sintática uma regra de X que produza a) então desempilhar X;empilhar em sentido inverso o lado direito da regra selecionada; senão ERRO; até que X=símbolo delimitador /pilha está vazia/
Exemplo ::= ::= + | λ ::= a | b Reconhecer a*b T → b T → a T E’ → λ E’ → +E E’ E → TE’ E → TE’ **E $
b a** Tabela sintática ERRO *b$ $E’
ab$ $E’a T a ab$ $E’T E TE’ a*b$ $E Regra Cadeia Pilha A cadeia não pertence à linguagem!
Exercício: reconheça a cadeia 01012 ::= 0 | 1 ::= 1 | 2 ::= 0 | 2 B → 2 A → 2 2 B → 0A B A → 1B A S → 1B S → 0A S 1 0 Tabela sintática