Tudo Sobre Pilha

65
Linguagens Livres de Contexto Autômatos de Pilha Programas, Linguagens e Parsing SCC-5832 - Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha João Luís Garcia Rosa 1 1 Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos [email protected] 2009 João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Transcript of Tudo Sobre Pilha

Page 1: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

SCC-5832 - Capítulo 2Linguagens Livres de Contexto e

Autômatos de Pilha

João Luís Garcia Rosa1

1Instituto de Ciências Matemáticas e de ComputaçãoUniversidade de São Paulo - São Carlos

[email protected]

2009

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 2: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 3: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 4: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Definição

Definição: Uma gramática G é livre de contexto (GLC)se v é apenas um símbolo não terminal para todaprodução v → w em P (v ∈ V e w ∈ (Σ ∪ V )∗). Umalinguagem L sobre algum alfabeto terminal Σ é livre decontexto (LLC) se pode ser gerada por uma GLC.Então a linguagem dos palíndromos, a linguagem dosparênteses casados e a linguagem construída de cadeiasde números iguais de a’s e b’s são todas livres decontexto, porque em todas foi mostrada uma GLC.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 5: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Exemplo

Exemplo: A seguinte GLC gera todas as cadeias sobre oalfabeto terminal Σ = {0,1} com um número igual de 0’s e1’s.

Σ = {0,1}V = {S,A,B}

P compreende as seguintes produções:S → 0B|1A

A→ 0|0S|1AAB → 1|1S|0BB

As derivações livres de contexto têm uma representaçãoem árvore muito útil e elegante. Por exemplo, a derivaçãodas cadeias 0011 e 000111 usando a gramática doExemplo acima é mostrada na próxima figura.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 6: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

A Figura (a) representa as derivações:S ⇒ 0B ⇒ 00BB ⇒ 001B ⇒ 0011: derivação mais aesquerdaS ⇒ 0B ⇒ 00BB ⇒ 00B1⇒ 0011: derivação mais adireita.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 7: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

Se uma cadeia pode ser derivada legalmente por umaGLC, então pode-se descrever esta derivação por umaárvore T com as seguintes propriedades:

1 A raiz é rotulada com o símbolo inicial S;2 Todo nó que não é uma folha é rotulado com uma variável -

um símbolo de V ;3 Todo nó que é uma folha é rotulado com um terminal - um

símbolo de Σ (ou possivelmente com λ);4 Se o nó N é rotulado com um A, e N tem k descendentes

diretos N1, ...,Nk , rotulados com símbolos A1, ...,Ak ,respectivamente, então existe uma produção da gramáticada forma A→ A1A2...Ak ;

5 Uma expressão derivada por alguma derivação pode serobtida pela leitura das folhas da árvore associada com estaderivação, da esquerda para a direita.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 8: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

Dada uma árvore para uma derivação livre de contexto,define-se o comprimento de um caminho da raiz à folhacomo sendo o número de não terminais neste caminho. Aaltura de uma árvore é o comprimento de seu caminhomais longo. (Logo, na Figura 4 (a), a altura da árvore é 3.)Considere a sub-árvore assinalada na Figura 4 (b). É umaárvore-B legal; isto é, é uma árvore de derivação legalusando a gramática do Exemplo 3 exceto que a raiz é umB e não um S.Agora se for considerada qualquer árvore de derivaçãolegal para uma cadeia nesta linguagem e substituídaqualquer sub-árvore-B nela com a sub-árvore assinalada,obtém-se uma outra árvore de derivação legal.Este é o significado de “livre de contexto” do ponto de vistade representações de árvore.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 9: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

Vai-se mostrar agora como a aplicação sistemática desteprincípio de substituição de sub-árvores pode ser usadopara estabelecer um resultado chave sobre a estrutura daslinguagens livres de contexto.Suponha que haja uma árvore de derivação T para umacadeia z de terminais gerada por alguma gramática G, esuponha depois que o símbolo não terminal A apareceduas vezes em algum caminho, como mostrado naFigura 8, onde z = uvwxy .Aqui a árvore-A inferior deriva a cadeia terminal w , e aárvore-A superior deriva a cadeia vwx .Como a gramática é livre de contexto, a substituição daárvore-A superior pela árvore-A inferior não afeta alegalidade da derivação.A nova árvore deriva a cadeia uwy .

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 10: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 11: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Árvore de derivação

Por outro lado, se for substituída a árvore-A inferior pelaárvore-A superior obtem-se uma árvore de derivação legalpara a cadeia uvvwxxy , que pode-se escrever comouv2wx2y .Esta substituição superior-para-inferior pode ser repetidaqualquer número finito de vezes, obtendo-se o conjunto decadeias {uvnwxny |n ≥ 0}.Toda LLC infinita deve conter infinitos subconjuntos decadeias desta forma geral.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 12: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 13: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Lema do Bombeamento para LLC

Lema do Bombeamento para Linguagens Livres deContexto. (Também conhecido como Teorema uvwxy ).Seja L uma LLC. Então existem constantes p e qdependentes de L apenas, tal que se z ∈ L com |z| > p,então z pode ser escrito como uvwxy de tal forma que

1 |vwx | ≤ q;2 no máximo um (v ou x) está vazio; e3 para todo i ≥ 0, as cadeias uv iwx iy ∈ L.

Note o seguinte:1 Dada uma linguagem gerada por uma gramática que não é

livre de contexto, não se pode deduzir imediatamente queela também não é gerada por uma GLC.

2 Mas se uma linguagem infinita não obedece o lema dobombeamento para linguagens livres de contexto, ela nãopode ser gerada por uma GLC.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 14: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 15: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Chomsky

Na matemática, uma forma normal é uma forma padrão dever alguns objetos matemáticos. Ou seja, a fração 1

2 éuma forma normal para 5

10 , 36 e 100

200 .Formas normais desempenham um papel importante nateoria da linguagem, e nesta seção serão discutidosmuitos resultados importantes de forma normal paragramáticas livres de contexto.Definição: Diz-se que uma GLC G = (Σ,V ,S,P) está naforma normal de Chomsky (FNC) se cada produção deP estiver em uma das seguintes formas:

1 S → λ,2 A→ BC, onde A,B,C ∈ V ,3 A→ a, onde A ∈ V e a ∈ Σ.

Além disso, se S → λ estiver em P, então B,C ∈ V − {S}na forma (2).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 16: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Chomsky

Teorema: Seja G uma GLC arbitrária. Então, existe umagramática equivalente G’ na forma normal de Chomsky.Exemplo: Dada a gramática

S → ABCC → BaB|cB → b|bbA→ a

Converte-se para a forma normal de Chomsky primeiroconvertendo terminais do lado direito para variáveis eadicionando produções apropriadas:

S → ABCC → BA1B|cA1 → aB → b|B1B1B1 → bA→ a

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 17: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Chomsky

Finalmente separam-se os lados direitos com mais deduas variáveis:

S → ADD → BCC → BE |cE → A1BA1 → aB → b|B1B1B1 → bA→ a

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 18: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Greibach

Definição: Diz-se que uma GLC está na forma normal deGreibach (FNG) se toda produção for da forma

A→ bWonde A ∈ V , b ∈ Σ e W ∈ V ∗.Lema: Seja G uma GLC. Então existe uma gramáticaequivalente G′, L(G) = L(G′), que não tem produçõesrecursivas a esquerda, isto é, nenhuma produção da formaA→ Av , onde A ∈ V e v ∈ (Σ ∪ V )∗ (Forma Normal semRecursão à Esquerda).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 19: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal sem Recursão à Esquerda

As gramáticas livres de contexto (GLC) podem terproduções recursivas à esquerda, como em:

A→ Av |wEstas produções derivam a cadeia wv∗, que também éderivada por:

A→ wB|wB → vB|v

sem recursões à esquerda.Para eliminar recursões à esquerda em geral, substitua

A→ Av1|Av2|...|Avn|w1|...|wm

que gera a expressão regular(w1 + ...+ wm)(v1 + ...+ vn)∗, por:

A→ w1|...|wm|w1B|...|wmBB → v1|...|vn|v1B|...|vnB

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 20: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Greibach

Teorema: Seja G qualquer GLC. Então existe umagramática equivalente G′, isto é, L(G) = L(G′), na formanormal de Greibach.

PROVA: Fixa-se a ordem das variáveis na gramáticaG : V = {A1,A2, ...,An}. G é crescente se toda produçãode G for da forma

1 Aj → Ak v , com j < k ; ou2 Aj → av , com a ∈ Σ.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 21: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Greibach

Considerando que G tem produções ou da formaA→ Ai1...Ain, com A′is ∈ V ou

A→ b, com b ∈ Σ.Se todas as produções de A1 são crescentes, continua-seem A2.De outra forma, há uma regra A1 recursiva à esquerda queé substituída como estabelecido em 6.Daí vai-se para as produções A2, substituindo por A1quando é encontrada uma produção da forma A2 → A1x , eentão eliminam-se recursões à esquerda em A2, se houver.E assim por diante até An.Então faz-se a substituição de volta de cima para baixopondo G na FNG.Finalmente, aplica-se a substituição de novo, às novasvariáveis introduzidas quando a recursão à esquerda foieliminada.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 22: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Greibach: Um Exemplo

Exemplo:A1 → A2A2|0: é crescenteA2 → A1A2|1: não é crescente

Como as produções A1 são crescentes, não se mexenelas. Deve-se mexer nas produções A2, substituindo A1pelas suas produções:

A1 → A2A2|0A2 → A2A2A2|0A2|1

Observe que agora, a primeira produção A2 tem recursãoà esquerda. Seja v = A2A2, w1 = 0A2 e w2 = 1, já queA→ Av |w deve ser transformado em A→ wB|w eB → vB|v (conforme procedimento de eliminação em 6),vem:

A1 → A2A2|0A2 → 0A2|1|0A2B|1BB → A2A2|A2A2B

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 23: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens Livres de ContextoLema do Bombeamento para Linguagens Livres de ContextoFormas Normais para Gramáticas Livres de Contexto

Forma Normal de Greibach: Um Exemplo

Agora tanto as produções A1 quanto as produções A2 sãocrescentes. Deve-se colocar as produções na FNG,fazendo aparecer um símbolo terminal à esquerda do ladodireito de cada produção:

A1 → 0A2A2|0A2BA2|1A2|1BA2|0A2 → 0A2|0A2B|1|1B

E em B deve-se eliminar variáveis na posição mais àesquerda do lado direito:

A1 → 0A2A2|0A2BA2|1A2|1BA2|0A2 → 0A2|0A2B|1|1BB →0A2A2|0A2BA2|1A2|1BA2|0A2A2B|0A2BA2B|1A2B|1BA2B

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 24: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 25: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

A Pilha como Processador de Linguagem

Nesta seção vai-se estabelecer uma das equivalênciasmais importantes na ciência da computação teórica:prova-se que uma linguagem é livre de contexto se esomente se algum autômato de pilha possa aceitar alinguagem de uma forma precisa. Este resultado temimportância prática e teórica, porque um armazém depilha é a base para muitos algoritmos usados no parsingde linguagens livres de contexto.Uma pilha, familiar em ciência de computação, é umaestrutura last-in first-out com uma operação “push” queadiciona à pilha e uma operação “pop” que remove oelemento do topo da pilha, se existir.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 26: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

A Pilha como Processador de Linguagem

A noção “pura” de uma pilha, descrita informalmenteacima, aumentada pela noção de transição de estado nãodeterminístico, provê um modelo de autômato completopara linguagens livres de contexto. Entretanto, certaestrutura adicional é também conveniente, e os próximostrês exemplos mostram porque isto é assim.Exemplo: Considere a linguagem

{w |w ∈ (a + b)∗, w tem um número igual de a′s e b′s}.

Esta linguagem é informalmente aceitável por uma pilhausando o seguinte algoritmo. Inicialmente, a pilha estávazia. Percorra a cadeia w da esquerda para a direita, erealize as seguintes operações, baseado no símbolocorrente no topo da pilha.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 27: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

A Pilha como Processador de Linguagem

Algoritmo:1 se a pilha estiver vazia e o símbolo corrente de w for um a,

ponha A na pilha;2 se a pilha estiver vazia e o símbolo corrente de w for um b,

ponha B na pilha;3 se o símbolo no topo da pilha for um A e o símbolo corrente

de w for um a, coloque (push) um outro A na pilha;4 se o símbolo no topo da pilha for um B e o símbolo

corrente de w for um b, coloque (push) um B na pilha;5 se o símbolo no topo da pilha for um A e o símbolo corrente

de w for um b, retire (pop) da pilha;6 se o símbolo no topo da pilha for um B e o símbolo

corrente de w for um a, retire (pop) da pilha.

Uma cadeia w tem um número igual de a′s e b′s se esomente se, depois de processar w , a pilha estiver vazia.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 28: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

A Pilha como Processador de Linguagem

Segue um “programa” de pilha para o algoritmo anterior.Z0 denota o fundo da pilha.A notação 〈x ,D, v〉 significa “se x é o próximo símbolo dacadeia de entrada w e D é o símbolo no topo da pilha,então substitua D pela cadeia v .”Pilha = cadeia, topo da pilha é o símbolo mais a esquerda.Então a descrição informal precedente pode ser rescritacomo se segue:

1 〈a,Z0,AZ0〉2 〈b,Z0,BZ0〉3 〈a,A,AA〉4 〈b,B,BB〉5 〈a,B, λ〉6 〈b,A, λ〉7 〈λ,Z0, λ〉: “regra-λ”: quando não houver entrada, apaga Z0

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 29: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 30: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Autômato de Pilha

Exemplo. Considere a linguagem {wcwR|w ∈ (a + b)∗}.Esta linguagem é reconhecível por um autômato do tipo doúltimo exemplo, mas um jeito mais conveniente dereconhecê-la é aumentar a maquinaria da pilha com umaestrutura de estados finitos consistindo de dois estados,um chamado “push” para processar a primeira metade dacadeia, o outro, chamado “pop”, para a segunda metade.A entrada c engatilha a transição de “push” para “pop”.Vai-se usar agora a notação 〈q, x ,D,q′, v〉 para significar“se a máquina de estados estiver no estado q, x for opróximo símbolo da cadeia de entrada e D for o símbolono topo da pilha, então a máquina de estados pode mudarpara o estado q′ e substituir D pela cadeia v .”

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 31: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Autômato de Pilha

Deve-se usar o símbolo Z para um símbolo de pilhaarbitrário.Então a instrução 〈push,a,Z ,push,AZ 〉 é o resumo paraas três instruções:

〈push,a,Z0,push,AZ0〉〈push,a,A,push,AA〉〈push,a,B,push,AB〉

Usando esta notação aumentada, pode-se descrever oautômato de pilha (APN) como:

1 〈push,a,Z ,push,AZ 〉2 〈push,b,Z ,push,BZ 〉3 〈push, c,Z ,pop,Z 〉4 〈pop,a,A,pop, λ〉5 〈pop,b,B,pop, λ〉6 〈pop, λ,Z0,pop, λ〉

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 32: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Autômato de Pilha

Note que o APN irá parar (não terá instruções para seguir)se ele ler um a enquanto B estiver no topo da pilha, noestado pop.A seguinte tabela mostra as configurações de pilhasucessivas nos segmentos de cadeia sucessivos paraentrada abbcbba:

cadeia pilhaabbcbba Z0bbcbba AZ0bcbba BAZ0cbba BBAZ0bba BBAZ0ba BAZ0a AZ0

Z0João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 33: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Autômato de Pilha

Definição: Um autômato de pilha (APN) (nãodeterminístico) é uma séptupla M = (Q,Σ, Γ, δ,q0,Z0,F ),onde:

1 Q é um conjunto finito de estados;2 Σ é um conjunto finito de símbolos de entrada;3 Γ é um conjunto finito de símbolos de pilha;4 δ é o conjunto de transições 〈q, x ,Z ,q′, σ〉 que também se

escreve na notação (q′, σ) ∈ δ(q, x ,Z ) tal que se possaconsiderar δ como uma função de transição:δ : Q × (Σ ∪ {λ})× Γ→ subconjuntos finitos de Q × Γ∗

5 q0 é o estado inicial;6 Z0 é o símbolo de pilha inicial;7 F ⊂ Q é um conjunto de estados de aceitação.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 34: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Descrição Instantânea

Dada esta maquinaria, pode-se falar sobre uma descriçãoinstantânea (DI) de um APN M:

Uma DI para um APN é uma tripla (q,w , σ) onde q é umestado, w = x1x2...xn é uma cadeia de símbolos de entradaainda a ser lidos com o APN correntemente lendo x1, eσ = Z1Z2...Zm é a cadeia de símbolos na pilha com Z1 notopo e Zm no fundo.

As transições entre DI’s mapeiam DIs para DIsnão-deterministicamente de duas formas: Se M estiver noestado q com o símbolo de entrada corrente x e elementode pilha corrente A, então

1 Se 〈q, x ,A,q′,A1...Ak 〉 para x ∈ Σ é uma quíntupla do APN,então M pode (não determinismo!) causar a seguintetransição entre DI’s: (q, xw ,Aσ)⇒ (q′,w ,A1...Akσ);

2 Se 〈q, λ,A,q′,A1...Akσ〉 é uma quíntupla do APN, entãosua execução pode causar a transição entre DI’s:(q, xw ,Aσ)⇒ (q′, xw ,A1...Akσ).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 35: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Aceitação pela Pilha Vazia e pelo Estado Final

Definição: Define-se a linguagem aceita pela pilhavazia por um APN M comoT (M) = {w |(q0,w ,Z0)⇒∗ (q, λ, λ), para qualquer q ∈ Q}.Definição: Seja M um APN. Define-se o conjunto decadeias aceitas pelo estado final por M comoF (M) = {w |(q0,w ,Z0)⇒∗ (qa, λ, σ), para algum qa ∈ F e

σ ∈ Γ∗}.Teorema: Uma linguagem L é APN aceitável pelo estadofinal se e somente se ela for APN aceitável pela pilhavazia.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 36: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Autômato de Pilha Generalizado

Definição: Um autômato de pilha generalizado é umAPN que se comporta de acordo com a descrição demáquina da Definição 5 exceto que podem existirtransições em δ as quais lêem uma cadeia de símbolos depilha (ao invés de exatamente um símbolo). Então, podemexistir finitamente muitas quíntuplas da forma

〈q,a,B1...Bk ,q′,C1...Cn〉Proposição: Se uma linguagem L é aceita por um APNgeneralizado, então L é aceita por um APN.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 37: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Autômato de Pilha

Provar-se-á que as linguagens livres de contexto sãoexatamente as linguagens aceitas por autômatos de pilha.Metade deste resultado, que mostra que toda linguagemlivre de contexto é aceita por um autômato de pilha, ébaseada na forma normal de Greibach para umagramática livre de contexto.Para motivar esta “simulação” de gramáticas livres decontexto por autômatos de pilha, primeiro mostra-se comoo AFN derivado de uma gramática linear a direita pode servisto como um APN de um estado.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 38: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Autômato de Pilha

Observação: Dado um AFN M = (Q,Σ, δ,Q0,F ), forme oAPN de um estado M~. Usa-se o símbolo ? para denotaro estado único de M~. Os símbolos da pilha de M~ são osestados, Q, de M. Então pode-se escrever M~ como:

M~ = ({?},Σ,Q, δ~, ?,q0, {?})

As transições δ~ de M~ imitam δ de acordo com a fórmula“trate o símbolo no topo da pilha de M~ como o estado deM,” tal que (?,q′) ∈ δ~(?, x ,q) sse q′ ∈ δ(q, x).É então claro que (?,w ,q0)⇒∗ (?, λ,q) sse q ∈ δ∗(q0,w).Se adicionar-se a δ~ as regras (?, λ) ∈ δ~(?, x ,q) sseδ(q, x) ∈ Fdeduz-se que (?,w ,q0)⇒∗ (?, λ, λ) sse δ∗(q0,w) ∈ F .Então T (M~) = T (M).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 39: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Autômato de Pilha

Em termos de gramática linear a direita, isto diz que aregra A→ bB fornece a quíntupla 〈?,b,A, ?,B〉 (que agoraserá abreviada para 〈b,A,B〉 como no Exemplo 5),enquanto a regra A→ b fornece a quíntupla 〈?,b,A, ?, λ〉.Em outras palavras, agora usando S no lugar de q0, aderivação S ⇒∗ w1A⇒ w1bB ⇒∗ w1bw2 = w é imitadapelo APN passando através das DIs

(?,w ,S)⇒∗ (?,bw2,A)⇒ (?,w2,B)⇒∗ (?, λ, λ)

Informalmente, isto diz que a cadeia de entradaprocessada parcialmente contém a porção da cadeiaoriginal w que não é lida e o total da cadeia é aceita sse avariável na pilha pode derivar esta cadeia.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 40: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Autômato de Pilha

Exemplo: Considere a gramática para {anbn|n ≥ 1} naforma normal de Greibach usando produções

P = {S → aSB|aB, B → b}Define-se um APN M não determinístico de um estadocom as transições

〈a,S,SB〉, 〈a,S,B〉, 〈b,B, λ〉Claramente, na leitura da cadeia de entrada anbn tem-seos resultados intermediários possíveis

1 (?,anbn,S)⇒∗ (?,an−jbn,SBj )2 (?,anbn,S)⇒∗ (?,an−k bn,Bk ) (k > 1)3 (?,anbn,S)⇒∗ (?,bn,Bn)

A derivação (1) é um estágio intermediário para derivaruma DI da forma (2) ou (3). Mas (2) é um dead end -nenhuma transição é aplicável - se n > k , enquanto (3)está no caminho da derivação completa

(?, anbn,S)⇒∗ (?, λ, λ).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 41: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 42: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Teorema da Equivalência

O teorema da equivalência estabelece que as linguagensaceitas por APNs são precisamente as linguagens livresde contexto.Teorema: Seja L = L(G) para alguma GLC G. Então L éaceita por algum APN (em geral, não determinístico). Ouseja, L = T (M) para algum APN.

Sem perda de generalidade, assuma que G está na formanormal de Greibach. Deve-se fornecer um autômato paraL(G) na forma de um APN de um estado M. Como M temapenas um estado ? pode-se novamente abreviarquíntuplas 〈?, x , z, ?,w〉 para a forma 〈x , z,w〉. Entãoassocie qualquer regra da forma A→ bCDE com ainstrução APN 〈b,A,CDE〉. Qualquer regra da formaA→ b leva à transição 〈b,A, λ〉. Regras-lambda tornam-semovimentos com nenhuma entrada: A→ λ corresponde a〈λ,A, λ〉.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 43: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Teorema da Equivalência

Exemplo: Considere as seguintes produções de umagramática na forma normal de Greibach para a linguagemdos parênteses casados:

S → (L|λ, L→ (LL|)O seguinte é uma derivação mais a esquerda da cadeia(()()) nesta gramática.

S ⇒ (L⇒ ((LL⇒ (()L⇒ (()(LL⇒ (()()L⇒ (()())

Dá-se o APN associado (de um estado) a seguir, com osímbolo S designando o fundo da pilha.

〈(,S,L〉, 〈λ,S, λ〉, 〈(,L,LL〉, 〈),L, λ〉Para APNs de um estado pode-se reverter o método doresultado prévio para achar uma gramática livre decontexto que gere a linguagem aceita pelo APN.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 44: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Teorema da Equivalência

Exemplo: Considere o Exemplo 5, um APN de um estadoque aceita a linguagem de números iguais de a′s e b′s. Asproduções da gramática associada (substituindo Z0 por Z )são:

Z → aAZ |bBZ |λ, A→ aAA|b, B → bBB|aVai-se resumir este processo estabelecendo o seguinteresultado:Teorema: Seja M um APN de um estado. Então existeuma GLC G tal que L(G) = T (M).

Para formar a gramática, converta triplas da forma 〈a,B, σ〉para σ ∈ Γ∗ em produções da forma B → aσ. Convertatriplas da forma 〈λ,B, σ〉 em produções da forma B → σ.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 45: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

A Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

O Teorema da Equivalência

Por causa do Teorema 4, precisa-se apenas provar quequalquer APN pode ser simulado por um APN de umestado a fim de estabelecer a equivalência completa delinguagens livres de contexto e a classe de linguagensaceitas pelos APNs. O próximo teorema estabelece esteresultado.Teorema: Seja M um APN. Então existe um APN de umestado M ′ tal que T (M) = T (M ′).Mostrou-se no capítulo 1 que todo autômato finito nãodeterminístico (AFN) M é equivalente a um determinístico(AFD), M ′, isto é, T (M) = T (M ′).No caso dos APN’s, esta equivalência também éverdadeira?A resposta é não: existem LLCs que não podem seraceitas por APNs determinísticos.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 46: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 47: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Linguagens de Programação

Como já foi visto, as linguagens livres de contexto sãoimportantes para a ciência da computação porque elasrepresentam um mecanismo razoavelmente adequadopara especificar a sintaxe das linguagens de programação.Seja o seguinte exemplo, as construções de programaçãoif-then e if-then-else estão presentes em muitaslinguagens de programação. Como uma primeiraaproximação, considere as seguintes produções de umagramática:

S → if C then S else S | if C then S | a | bC → p | q

Aqui, S é um (comando) não terminal, C é um(condicional) não terminal, a e b são (comandos)terminais, p e q são (condições) terminais e if , then e elsesão (palavras reservadas) terminais.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 48: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Linguagens de Programação

Existem problemas com esta gramática. Ela gera alinguagem pretendida, mas de forma ambígua. Emparticular,

if p then if q then a else bpode ser gerado de duas formas (vide figura 4 a e b),correspondendo às duas interpretações diferentes docomando:

if p then (if q then a else b)

eif p then (if q then a) else b.

Do ponto de vista da programação, um jeito padrão deinterpretar tais construções é associar cada comando elsecom o if mais próximo.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 49: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Linguagens de Programação

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 50: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Gramática Ambígua

As gramáticas não ambíguas são essenciais para umaespecificação sintática bem definida, de outra forma, umcompilador poderia traduzir um programa de formasdiferentes gerando resultados completamente diferentes.Logo, o estudo da ambiguidade é um aspecto prático eteórico importante da teoria das linguagens formais.Definição: Uma GLC G é ambígua se alguma cadeiaw ∈ L(G) tem duas árvores de derivação distintas.Alternativamente, G é ambígua se alguma cadeia em L(G)tem duas derivações mais a esquerda (ou mais a direita)distintas. Uma gramática é não ambígua se ela não forambígua e uma linguagem L é inerentemente ambíguase toda gramática para L for ambígua.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 51: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 52: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing

O exemplo do if-then-else ilustra como as gramáticaspodem ser usadas para gerar construções de linguagensde programação.Dada uma cadeia (um texto de programa) e umalinguagem (de programação) especificada por algumagramática, deve ser possível construir uma árvore dederivação para a cadeia rapidamente e facilmente se acadeia pertencer à linguagem, ou relatar um erro se acadeia não for bem formada.O problema de fazer derivação de cadeia backward - dadauma cadeia, recuperar sua derivação - é conhecido comoo problema do parsing para LLCs.Sua solução satisfatória é um dos pontos mais importantesno desenvolvimento da ciência da computação.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 53: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing bottom-up e top-down

No momento, interessa uma visão simplificada do parsing:dada uma cadeia w , como se pode dizer se w élegalmente gerável por uma determinada GLC G?Existem duas estratégias básicas para resolver esteproblema.Uma estratégia, o parsing bottom-up, considera aconstrução de uma árvore de parse para w , tomando porhipótese uma árvore de derivação para w começando como fundo (bottom) - as folhas da árvore - e trabalhando paracima na árvore até a raiz.A segunda estratégia básica, o parsing top-down,trabalha de outra forma, tomando por hipótese o topo deuma árvore de derivação, começando primeiro com a raiz.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 54: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing bottom-up

Exemplo: Fazer o parsing de expressões aritméticas debaixo para cima. Neste exemplo mostra-se uma gramáticapara um fragmento da linguagem de expressõesaritméticas (Gbu) e explica-se um algoritmo simples parafazer o parsing destas expressões “bottom-up.” O símboloinicial para a gramática Gbu é E .

1 E → E + T2 E → T3 T → T ∗ F4 T → F5 F → (E)6 F → 2

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 55: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing bottom-up

Agora suponha que se deseja decidir se a cadeia2 + 2 ∗ 2

é gerada pela gramática Gbu. A abordagem é rodar aderivação backward, simulando uma derivação mais adireita como se processa a cadeia da esquerda para adireita. Os primeiros cinco passos do processo:

1 2 + 2 ∗ 2⇐ F + 2 ∗ 2 (reverso 6)2 ⇐ T + 2 ∗ 2 (reverso 4)3 ⇐ E + 2 ∗ 2 (reverso 2)4 ⇐ E + F ∗ 2 (reverso 6)5 ⇐ E + T ∗ 2 (reverso 4)

E agora está-se num ponto crucial no parsing. Trêscaminhos são possíveis:

1 converter E + T em E , deixando E ∗ 2;2 converter T em E , deixando E + E ∗ 2;3 converter 2 em F , deixando E + T ∗ F .

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 56: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing bottom-up

As primeiras duas escolhas não são viáveis - elas levam a“dead ends,” a partir das quais não há parsing bemsucedido possível. Escolha (3) que levará a um parsingbem sucedido, através de

1 converter T ∗ F a T ;2 converter E + T a E , o símbolo inicial da gramática.

Este exemplo ilustra o não determinismo possível noprocesso de parsing. O projeto de parsers eficientes -parsers que limitam, ou eliminam completamente, o tipode não determinismo que se viu neste exemplo - é o maiorcomponente da área da ciência da computação conhecidocomo análise sintática.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 57: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing top-down

Exemplo: o parsing “top-down.” Linguagem deprogramas-while (fragmento do C):{y = 0;while (x != y)y++;

}

Este programa estabelece a valor de y igual ao de x , istoé, o programa realiza o comando de atribuição y = x .Vai-se agora mostrar uma gramática simples (Gtd ) para asintaxe desta linguagem:

Σ = {{, },−−,++,=, ! =,while, ; , (, ),0, x , y}V = {C,S,S1,S2,A,W ,U,T ,N}Símbolo Inicial = C

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 58: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Parsing top-down

Gtd :Produções =

1 C → {S1} (C para comando composto)2 S1 → S S23 S2 → S1|λ4 S → A | W | C5 A→ U = N; |U T ; (A para comando de atribuição)6 T → −− | + +7 W → while (U ! = U) S (W para comando while)8 U → x | y9 N → 0

O parsing top-down é completamente determinístico:nenhum backtracking é necessário, e em todo estágiopode-se predizer sem dificuldade qual produção éapropriada, dado o símbolo do texto corrente. A técnica“top-down” é chamada de parsing LL.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 59: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

Sumário

1 Linguagens Livres de ContextoLinguagens Livres de ContextoLema do Bombeamento para Linguagens Livres deContextoFormas Normais para Gramáticas Livres de Contexto

2 Autômatos de PilhaA Pilha como Processador de LinguagemO Autômato de PilhaO Teorema da Equivalência

3 Programas, Linguagens e ParsingLinguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 60: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

GLC e a Língua Natural

Já foi dito que a teoria moderna das gramáticas formaissegue em parte das teorias da língua natural que foramdesenvolvidas pelo linguista Noam Chomsky.Vai-se descrever agora brevemente como as gramáticasformais podem ser usadas para descrever língua natural.

As categorias da língua natural são associadas a símbolosnão terminais de uma gramática:

S: SentençaSN: Sintagma NominalSV : Sintagma VerbalAdj : AdjetivoDet : DeterminanteV : VerboN: SubstantivoPrep: PreposiçãoSA: Sintagma AdjetivalSP: Sintagma Preposicional

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 61: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

GLC e a Língua Natural

Pode-se escrever agora uma GLC que descreve aestrutura sintática de um pequeno subconjunto doPortuguês:

S → SN SVSN → Det N | Det SA N | Det N SA | Det SA N SASA→ Adj SA | AdjSV → Vlig SPSP → Prep SN

É claro que as palavras do Português constituem ossímbolos terminais desta gramática, e portanto deve-seadicionar produções da forma:

Vlig → é | estáDet → o | a | os | as | umPrep → em | sobre | para

etc. Dada esta gramática pode-se derivar sentenças como“A grande bola vermelha está sobre a mesa” (figura 4).

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 62: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

GLC e a Língua Natural

Figure: Árvore de derivação para “A grande bola vermelha está sobrea mesa.”

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 63: Tudo Sobre Pilha

Linguagens Livres de ContextoAutômatos de Pilha

Programas, Linguagens e Parsing

Linguagens de ProgramaçãoParsingGramáticas Livres de Contexto e a Língua Natural

GLC e a Língua Natural

Um problema imediato com esta gramática é aconcordância de caso.A gramática gera sentenças do tipo “As grande bolavermelhas estão sobre as mesa.”Deve-se portanto, incluir as concordâncias de gênero enúmero.Vários problemas linguísticos surgirão a partir destagramática simples.Distorções não livres de contexto.Chomsky argumenta que uma língua natural não pode sergerada por uma GLC.Há a necessidade de algo mais complexo.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 64: Tudo Sobre Pilha

Apêndice Bibliografia

Bibliografia I

[1] Hopcroft, J. E., Ullman, J. D.Formal Languages and Their Relation to Automata.Addison-Wesley Publishing Company, 1969.

[2] Hopcroft, J. E., Ullman, J. D. e Motwani, R.Introdução à Teoria de Autômatos, Linguagens eComputação.Tradução da segunda edição americana. Editora Campus,2003.

[3] JFLAP Version 6.0.Ferramenta para Diagrama de Estados.www.jflap.org.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

Page 65: Tudo Sobre Pilha

Apêndice Bibliografia

Bibliografia II

[4] Moll, R. N., Arbib, M. A., and Kfoury, A. J.An Introduction to Formal Language Theory.Springer-Verlag, 1988.

[5] Rosa, J. L. G.SCE-0185 - Teoria da Computação e Linguagens Formais.Slides. Ciências de Computação. Instituto de CiênciasMatemáticas e de Computação. Universidade de SãoPaulo, 2008.

João Luís Garcia Rosa, 2009 SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha