Esquemas L-atribuídos. Conceitos Permitem usar atributos herdados e sintetizados Dada uma...

27
Esquemas L-atribuídos

Transcript of Esquemas L-atribuídos. Conceitos Permitem usar atributos herdados e sintetizados Dada uma...

Page 1: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Esquemas L-atribuídos

Page 2: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Conceitos Permitem usar atributos herdados e

sintetizados Dada uma produção A→ X1 X2 X3 ...

Os atributos herdados de X2 só devem depender de atributos de A e de X1.

Os atributos herdados de X3 só devem depender de atributos de A, de X1 e de X2.

E assim por diante.

Todo esquema S-atribuído será também L-atribuído

Page 3: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Avaliação de atributos Para avaliar os atributos, usa-se o algoritmo

de caminhamento:

Caminhamento_profundidade(n:nodo)Inicio

Para cada filho m de n, da esquerda para a direita, faça:

Calcule os atributos herdados de m;

Caminhamento_profundidade(m);Fim paraCalcule os atributos sintetizados de n;

Fim

Page 4: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Ordenação das ações semânticas

Ao se definir a gramática, deve ser garantido que um atributo já seja conhecido ao ser referenciado em alguma ação.

Portanto: Ação para calcular atributo herdado de símbolo na

parte direita da produção deve estar à esquerda desse símbolo.

Ação para calcular atributo não terminal à esquerda da produção deve estar no final da produção.

Ação para calcular atributo sintetizado de símbolo na parte direita da produção deve estar à direita desse símbolo.

Page 5: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Esquemas L-atribuídos normalmente serão implementados por analisadores top-down.

Deve-se portanto, eliminar a recursividade à esquerda das produções, se existirem.

Ao se eliminar a recursividade, as ações semânticas da produção também devem ser modificadas.

Page 6: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Sendo a produção genérica com recursividade:

A → A1 B {A.a = g(A1.a, B.b)}

A → C {A.a = f(C.c)}

A eliminação da recursividade da gramática pode ser feita inserindo o símbolo X, tal que:

A → C XX → B X | ε

Page 7: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Sendo a produção genérica com recursividade:A → A1 B {A.a = g(A1.a, B.b)}A → C {A.a = f(C.c)}

A função calculada na ação da segunda produção será transferida para a produção gerada por A, porém seu valor irá para atributo herdado do símbolo X.

O atributo sintetizado de A será obtido no final da avaliação da produção, e irá depender de atributo sintetizado de X.

A → C {X.h = f(C.c)} X {A.a = X.s}

Page 8: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Sendo a produção genérica com recursividade:A → A1 B {A.a = g(A1.a, B.b)}

A → C {A.a = f(C.c)}

A função calculada na ação da primeira produção será transferida para a produção gerada por X, porém seu valor irá para atributo herdado do símbolo X1.

O atributo sintetizado de X será obtido da mesma forma, no final da avaliação.

X → B {X1.h = g(X.h, B.b)} X1 {X.s = X1.s}

Page 9: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Sendo a produção genérica com recursividade:

A → A1 B {A.a = g(A1.a, B.b)}

A → C {A.a = f(C.c)}

A produção que gera palavra vazia gerada por X será usada para se obter o valor do atributo sintetizado de X, da forma:

X → ε {X.s = X.h}

Page 10: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Implementação de esquemas L-atribuidos

Sendo a produção genérica com recursividade:

A → A1 B {A.a = g(A1.a, B.b)}

A → C {A.a = f(C.c)}

Eliminando-se a recursividade teremos:A → C {X.h = f(C.c)} X {A.a = X.s}X → B {X1.h = g(X.h, B.b)} X1 {X.s = X1.s}X → ε {X.s = X.h}

Page 11: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Gramática a ser avaliada:

E→E1 + T {E.val = E1.val + T.val}

E→E1 - T {E.val = E1.val - T.val}E→T {E.val = T.val}T→(E) {T.val = E.val}T→num {T.val = num.lexval}

(Recursividade em E. Não é preciso modificar as duas últimas produções)

Page 12: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo

Eliminando a recursividade, inserindo o símbolo X:

E→T {X.h = T.val} X {E.val = X.s}

X→ + T {X1.h = X.h +T.val} X1{X.s = X1.s}

X→ - T {X1.h = X.h – T.val} X1{X.s = X1.s}X → ε {X.s = X.h}T→(E) {T.val = E.val}T→num {T.val = num.lexval}

Page 13: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Avaliando a sentença 8 + 4 – 1, teremos a árvore:

E

T X.h= X E.val=

num T.val= + T X1.h= X1 X.s=

num T.val=

- T X2.h= X2 X1.s=

num T.val= ε X2.s =

Page 14: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Atribuindo valores ao símbolo num:

E

T X.h= X E.val=

num T.val= + T X1.h= X1 X.s=

8 num T.val=

4 - T X2.h= X2 X1.s=

num T.val= ε X2.s =

1

Page 15: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h= X E.val=

num T.val=8 + T X1.h= X1 X.s=

8 num T.val=

4 - T X2.h= X2 X1.s=

num T.val= ε X2.s =

1

Page 16: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h= X1 X.s=

8 num T.val=

4 - T X2.h= X2 X1.s=

num T.val= ε X2.s =

1

Page 17: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h= X1 X.s=

8 num T.val=4

4 - T X2.h= X2 X1.s=

num T.val= ε X2.s =

1

Page 18: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1 X.s=

8 num T.val=4

4 - T X2.h= X2 X1.s=

num T.val= ε X2.s =

1

Page 19: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1 X.s=

8 num T.val=4

4 - T X2.h= X2 X1.s=

num T.val=1 ε X2.s =

1

Page 20: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1 X.s=

8 num T.val=4

4 - T X2.h=11 X2 X1.s=

num T.val=1 ε X2.s =

1

Page 21: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1 X.s=

8 num T.val=4

4 - T X2.h=11 X2 X1.s=

num T.val=1 ε X2.s = 11

1

Page 22: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1 X.s=

8 num T.val=4

4 - T X2.h=11 X2 X1.s= 11

num T.val=1 ε X2.s = 11

1

Page 23: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val=

num T.val=8 + T X1.h=12 X1X.s= 11

8 num T.val=4

4 - T X2.h=11 X2 X1.s= 11

num T.val=1 ε X2.s = 11

1

Page 24: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Exemplo Fazendo o caminhamento na árvore:

E

T X.h=8 X E.val= 11

num T.val=8 + T X1.h=12 X1 X.s= 11

8 num T.val=4

4 - T X2.h=11 X2 X1.s= 11

num T.val=1 ε X2.s = 11

1

Page 25: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Obtenção da árvore sintática Alterando algumas ações da gramática (os

não terminais terão ponteiros – ptr - e será gerado nó ao invés de cálculo):

E→T {X.h = T.ptr} X {E.ptr = X.s}X→ + T {X1.h = geranodo(‘+’,X.h,T.ptr)} X1{X.s = X1.s}

X→ - T {X1.h = geranodo(‘-’,X.h ,T.ptr)} X1 {X.s = X1.s}X → ε {X.s = X.h}T→(E) {T.ptr = E.ptr}T→num {T.ptr = gerafolha(num,num.lexval)}T→id {T.ptr = gerafolha(id,id.indice)}

Page 26: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Obtenção da árvore sintática Portanto, serão geradas folhas da árvore ao se processar produções em T, e nodos ao se processar as produções

em X. Para a entrada x - 2 + y, a árvore de derivação fica:

E

T X

id - T X

num + T X

id εGerar folha

Gerar nodo

Gerar folhaGerar nodo

Gerar folha

Page 27: Esquemas L-atribuídos. Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2.

Árvore de sintaxe obtida

+

- id y

id x num 2