Linguagens Livres de Contexto
Linguagens Regulares
Linguagens Livres de Contexto Linguagens Regulares
Linguagens Livres de Contexto Gramáticas Livres de Contexto Autômatos de Pilha pilha autômato
Gramáticas Livres de Contexto
Exemplo Uma gramática livre de contexto : Uma derivação:
Uma gramática livre de contexto : Outra derivação:
(((( ))))
Exemplo Uma gramática livre de contexto : Uma derivação:
Uma gramática livre de contexto : Outra derivação:
Exemplo Uma gramática livre de contexto : Uma derivação:
Uma gramática livre de contexto : Uma derivação:
() ((( ))) (( ))
Definição: Gramática Livre de Contexto Variáveis Símbolos terminais Variável inicial Produções da forma: é um string de variáveis e terminais
Definição: Linguagem Livre de Contexto Uma linguagem é livre de contexto se existe uma gramática livre de contexto tal que
Ordem de Derivação derivação mais à esquerda : derivação mais à direita:
derivação mais à esquerda: derivação mais à direita:
Árvores de Derivação
Árvore de derivação
Árvore de derivação resultado
Partial Derivation Trees Árvore de derivação parcial
Árvore de derivação parcial
forma sentencial Árvore de derivação parcial resulta
À vezes, a ordem de derivação não importa Mais à esquerda: Mais à direita: Mesma árvore de derivação
Ambiguidade
derivação mais à esquerda
derivação mais à esquerda
Duas árvores de derivação
A gramática é ambígua: string tem duas árvores de derivação
Definição: Uma gramática livre de contexto é ambígua se algum string tem duas ou mais árvores de derivação
Em outras palavras: Uma gramática livre de contexto é ambígua se algum string tem duas ou mais derivações mais à esquerda (ou mais à direita)
Porque ambiguidade importa? tome
Resultado correto:
Ambiguidade é ruim para linguagens de programação Gostaríamos de remover ambiguidade
Corrigindo a gramática ambígua: Nova gramática não ambígua:
Única árvore de derivação
A gramática : não é ambígua: Todo string tem uma única árvore de derivação
Ambiguidade Inerente Algumas linguagens livres de contexto possuem apenas gramáticas ambíguas Exemplo:
O string possui duas árvores de derivação