1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira.

Post on 18-Apr-2015

108 views 0 download

Transcript of 1 Parser GLR Denis Pinheiro Teoria de Linguagens Prof. Newton José Vieira.

1

Parser GLR

Denis PinheiroTeoria de Linguagens

Prof. Newton José Vieira

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

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

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

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

6

Sumário

Motivação Parser LR Parser GLR Trabalhos Relacionados Conclusão

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

8

Parser LR

Componentes

Entrada Saída Pilha Tabela de Parsing

APD Actions

Shift, Reduce Goto

Próximo estado

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

10

Parser LR

Funcionamento Entrada: id * id + id

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

12

Parser GLR

Exemplo: (1) E → E + E (2) E → E * E (3) E → id

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

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)

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)

16

Parser GLR

Stack List para o processamento de “id+id*id”:

Acabou de empilhar id no topo.

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

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)

19

Parser GLR

Primeira Otimização: Duas pilhas se unem:

20

Parser GLR

Primeira Otimização: Duas pilhas se unem:

A lista de pilhas (Stack List) toma a forma de uma floresta

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

22

Parser GLR

Segunda Otimização: Criando cópias otimizadas

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

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.

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

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.

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.