A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 Esquemas L-atribuídos

2 Conceitos  Permitem usar atributos herdados e sintetizados  Dada uma produção A → X 1 X 2 X 3... Os atributos herdados de X 2 só devem depender de atributos de A e de X 1. Os atributos herdados de X 3 só devem depender de atributos de A, de X 1 e de X 2. E assim por diante.  Todo esquema S-atribuído será também L-atribuído

3 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 para Calcule os atributos sintetizados de n; Fim

4 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.

5 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.

6 Implementação de esquemas L- atribuidos  Sendo a produção genérica com recursividade: A → A 1 B {A.a = g(A 1.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 X X → B X | ε

7 Implementação de esquemas L- atribuidos  Sendo a produção genérica com recursividade: A → A 1 B {A.a = g(A 1.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}

8 Implementação de esquemas L- atribuidos  Sendo a produção genérica com recursividade: A → A 1 B {A.a = g(A 1.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 X 1.  O atributo sintetizado de X será obtido da mesma forma, no final da avaliação. X → B {X 1.h = g(X.h, B.b)} X 1 {X.s = X 1.s}

9 Implementação de esquemas L- atribuidos  Sendo a produção genérica com recursividade: A → A 1 B {A.a = g(A 1.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}

10 Implementação de esquemas L- atribuidos  Sendo a produção genérica com recursividade: A → A 1 B {A.a = g(A 1.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 {X 1.h = g(X.h, B.b)} X 1 {X.s = X 1.s} X → ε {X.s = X.h}

11 Exemplo  Gramática a ser avaliada: E → E 1 + T{E.val = E 1.val + T.val} E → E 1 - T{E.val = E 1.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)

12 Exemplo  Eliminando a recursividade, inserindo o símbolo X: E → T{X.h = T.val} X {E.val = X.s} X → + T {X 1.h = X.h +T.val} X 1 {X.s = X 1.s} X → - T {X 1.h = X.h – T.val} X 1 {X.s = X 1.s} X → ε {X.s = X.h} T → (E){T.val = E.val} T → num{T.val = num.lexval}

13 Exemplo  Avaliando a sentença – 1, teremos a árvore: E T X.h= X E.val= num T.val= + T X 1.h= X 1 X.s= num T.val= - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s =

14 Exemplo  Atribuindo valores ao símbolo num: E T X.h= X E.val= num T.val= + T X 1.h= X 1 X.s= 8 num T.val= 4 - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s = 1

15 Exemplo  Fazendo o caminhamento na árvore: E T X.h= X E.val= num T.val=8 + T X 1.h= X 1 X.s= 8 num T.val= 4 - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s = 1

16 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h= X 1 X.s= 8 num T.val= 4 - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s = 1

17 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h= X 1 X.s= 8 num T.val=4 4 - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s = 1

18 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 8 num T.val=4 4 - T X 2.h= X 2 X 1.s= num T.val= ε X 2.s = 1

19 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 8 num T.val=4 4 - T X 2.h= X 2 X 1.s= num T.val=1 ε X 2.s = 1

20 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 8 num T.val=4 4 - T X 2.h=11 X 2 X 1.s= num T.val=1 ε X 2.s = 1

21 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 8 num T.val=4 4 - T X 2.h=11 X 2 X 1.s= num T.val=1 ε X 2.s = 11 1

22 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 8 num T.val=4 4 - T X 2.h=11 X 2 X 1.s= 11 num T.val=1 ε X 2.s = 11 1

23 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= num T.val=8 + T X 1.h=12 X 1 X.s= 11 8 num T.val=4 4 - T X 2.h=11 X 2 X 1.s= 11 num T.val=1 ε X 2.s = 11 1

24 Exemplo  Fazendo o caminhamento na árvore: E T X.h=8 X E.val= 11 num T.val=8 + T X 1.h=12 X 1 X.s= 11 8 num T.val=4 4 - T X 2.h=11 X 2 X 1.s= 11 num T.val=1 ε X 2.s = 11 1

25 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 {X 1.h = geranodo(‘+’,X.h,T.ptr)} X 1 {X.s = X 1.s} X → - T {X 1.h = geranodo(‘-’,X.h,T.ptr)} X 1 {X.s = X 1.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)}

26 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 y, a árvore de derivação fica: E TX id -TX num + TX id ε Gerar folha Gerar nodo Gerar folha Gerar nodo Gerar folha

27 Árvore de sintaxe obtida + - idy x num2


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google