1 parser glr denis pinheiro teoria de linguagens prof. newton josé vieira
TRANSCRIPT
![Page 1: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/1.jpg)
1
Parser GLR
Denis PinheiroTeoria de Linguagens
Prof. Newton José Vieira
![Page 2: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/2.jpg)
2
Motivação
Linguagens de Programação (LP) são estruturalmente bem definidas
A maioria da LPs são definidas sem ambigüidades (exceção, C++, Pearl etc.) Subconjunto das LLCs
![Page 3: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/3.jpg)
3
Motivação
Existem Parsers muito eficientes (e.g. LL, LR etc.) que as reconhecem São determinísticos Não suportam ambigüidades, nem conflitos Baseados em um subconjunto de GLCs
![Page 4: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/4.jpg)
4
Motivação
Linguagens Naturais (LN) são difíceis de serem tratadas Ambigüidade
Parsers que reconhecem as LPs, não suportam as LNs Não-determinismo
Necessidade de um mecanismo eficiente de reconhecimento das LNs
![Page 5: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/5.jpg)
5
Motivação
Tomita (1986) apresenta um algoritmo eficiente: GLR parser (Generalized LR parser)
Extensão do algoritmo de parsing LR
Reconhece todas as LLC Simula o não-determinismo das GLC
ambíguas Solução para o reconhecimento das LNs
![Page 6: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/6.jpg)
6
Sumário
Motivação Parser LR Parser GLR Trabalhos Relacionados Conclusão
![Page 7: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/7.jpg)
7
Parser LR
Processa uma entrada da esquerda para a direita (Left-right)
Realiza uma derivação mais à direita (Right- most derivation)
Baseado em uma gramática LR Não ambígua Sem conflitos
![Page 8: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/8.jpg)
8
Parser LR
Componentes
Entrada Saída Pilha Tabela de Parsing
APD Actions
Shift, Reduce Goto
Próximo estado
![Page 9: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/9.jpg)
9
Parser LR
Funcionamento 1. E → E + T 2. E → T 3. T → T + F 4. T → F 5. F → (E) 6. F → id
Parsing Table
![Page 10: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/10.jpg)
10
Parser LR
Funcionamento Entrada: id * id + id
![Page 11: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/11.jpg)
11
Parser GLR
Criado por Tomita (1986)
Seu objetivo era poder processar LNs eficientemente
É uma extensão do Parser LR Reconhece LLCs (Parser Universal) Sua Tabela de Parsing pode conter duas ou mais ações Usa não-determinismo para resolver o problema
![Page 12: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/12.jpg)
12
Parser GLR
Exemplo: (1) E → E + E (2) E → E * E (3) E → id
![Page 13: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/13.jpg)
13
Parser GLR
Usa uma lista de pilhas (Stack List) e busca em largura (pseudo-paralelismo)
Algoritmo: Vários processos executam em paralelo Cada processo têm uma pilha e executa o
algoritmo de parsing LR
![Page 14: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/14.jpg)
14
Parser GLR
Algoritmo: Quando um processo encontra múltiplas
entradas: Um novo processo é criado para cada entrada
adicional Cada novo processo tem um cópia da pilha As cópias das pilhas são adicionadas na Stack List
Quando um processo encontra um erro O processo termina Sua pilha é removida da lista de pilhas (Stack List)
![Page 15: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/15.jpg)
15
Parser GLR
Algoritmo Os processos são todos sincronizados
Executam operações de shift ao mesmo tempo Estão sempre processando o mesmo símbolo de
entrada Quando um processo encontra uma ação de
shift: aguarda os outros processos também encontrarem
uma ação de shift (possivelmente diferente)
![Page 16: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/16.jpg)
16
Parser GLR
Stack List para o processamento de “id+id*id”:
Acabou de empilhar id no topo.
![Page 17: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/17.jpg)
17
Parser GLR
Problemas: Trabalho duplicado
O que um processo está processando pode já ter sido processado por outro processo
O número de pilhas na Stack List cresce exponencialmente em relação ao número de ambigüidades encontradas
![Page 18: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/18.jpg)
18
Parser GLR
Primeira Otimização: Quando dois ou mais processos estão no
mesmo estado: Os estados no topo da pilha são unificados
criando uma pilha estruturada na forma de árvore (Tree-structured Stack)
Haverá apenas um processo com uma pilha onde o topo da pilha será a raiz da árvore
Quando o estado do topo for desempilhado são criados o mesmo número processos com as respectivas pilhas (filhas do nodo raiz)
![Page 19: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/19.jpg)
19
Parser GLR
Primeira Otimização: Duas pilhas se unem:
![Page 20: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/20.jpg)
20
Parser GLR
Primeira Otimização: Duas pilhas se unem:
A lista de pilhas (Stack List) toma a forma de uma floresta
![Page 21: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/21.jpg)
21
Parser GLR
Segunda Otimização: Quando múltiplas entradas são encontradas,
uma cópia inteira da pilha é feita para cada novo processo criado
Mas, não é necessário copiar a pilha inteira: Em diferentes processos, as partes de baixo das
pilhas permanecem iguais; Somente o que ainda não foi reduzido precisa
ser copiado
![Page 22: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/22.jpg)
22
Parser GLR
Segunda Otimização: Criando cópias otimizadas
![Page 23: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/23.jpg)
23
Parser GLR
Segunda Otimização: Criando cópias otimizadas das pilhas
A lista de pilhas toma a forma de um grafo acíclico direcionado
![Page 24: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/24.jpg)
24
Parser GLR
Com estas otimizações, garante-se: O parser não processa parte de uma sentença
várias vezes da mesma maneira Pois, se dois processos fizeram o parsing de
uma sentença da mesma maneira, eles devem estar no mesmo estado
Logo, eles serão unidos em um único processo.
![Page 25: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/25.jpg)
25
Trabalhos Relacionados
Algoritmo CYK (Cocke and Younger, 1967), (Kazami,1965) Baseado em Programação Dinâmica(PD) Reconhece qualquer GLC na FNC Logo, reconhece qualquer LLC
Algoritmo de Earley (1970) Parser Universal de GLC Também baseado em PD Usado para processamento de Linguagens
Naturais
![Page 26: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/26.jpg)
26
Conclusão
O Parser GLR é um Parser Universal Todas as LLCs podem ser reconhecidas através dos
Parsers Universais Compiladores de LPs não utilizam estes tipos de
parsers: Existem algoritmos mais apropriados para as LPs
(determinísticos) GLCs para as LPs normalmente são não ambíguas
Parsers Universais são normalmente utilizados para reconhecimento de LNs.
![Page 27: 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira](https://reader036.vdocuments.mx/reader036/viewer/2022062404/552fc12b497959413d8d0153/html5/thumbnails/27.jpg)
27
Bibliografia
[Aho et. al., 1986] Compilers: Principles, Techniques, and Tools. Addison-Wesley. 1986.
[Tomita, 1986] Efficient Parsing for Natural Language. Kluwer Academic Publishers.
[Cocke et. al.,1970]. Programming languages and their compilers: Preliminary notes. Technical report, Courant Institute of Mathematical Sciences, New York University.
[Kasami, 1965]. An efficient recognition and syntax-analysis algorithm for context-free languages. Scientific report AFCRL-65-758, Air Force Cambridge Research Lab, Bedford, MA.
[Younger, 1967]. Recognition and parsing of context-free languages in time n3. Information and Control 10(2): 189–208.
[J. Earley, 1970]. An efficient context-free parsing algorithm. Communications of the ACM, 13(2):94-102, 1970.