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

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

Determinar o tipo de gramática Compiladores João M. P. Cardoso.

Apresentações semelhantes


Apresentação em tema: "Determinar o tipo de gramática Compiladores João M. P. Cardoso."— Transcrição da apresentação:

1 Determinar o tipo de gramática Compiladores João M. P. Cardoso

2 Exemplo Dada a seguinte gramática, diga se o analisador sintáctico pode ser LL(1), LR(0), ou LR(1) S X $(1) X ( | Y(2, 3) Y ( Y ) | (4, 5)

3 Determinar o tipo de gramática Seja X o tipo de analisador (LL(1), LR(0), etc.): 1.Construir a tabela do parser para X –Para as gramáticas LR a criação da tabela do parser requer a construção do DFA 2.Caso existam conflitos, a gramática não pode ser implementada pelo analisador X Caso não existam conflitos, a gramática pode ser implementada pelo analisador X

4 Determinar o tipo de gramática: LL(1)

5 LL(1) Tabela do parser obtida directamente –Para cada produção da gramática vamos determinar o conjunto First do RHS Caso o RHS possa derivar determinámos o Follow do LHS –Colocámos cada produção nas colunas cujos símbolos terminais pertencem aos conjuntos determinados anteriormente e na linha que identifica o LHS S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

6 LL(1) Tabela do parser –Produção: S X –First(X) = {(} colocar S X na célula [S, (] S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X Y

7 LL(1) Tabela do parser –Produção: S X –First(X) = {(} colocar S X na célula [S, (] –como S pode derivar (via X) determinar Follow(S) = { } S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X Y

8 LL(1) Tabela do parser –Produção: X ( (2) –First(() = {(} colocar X ( na célula [X, (] S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( Y

9 LL(1) Tabela do parser –Produção: X Y (3) –First(Y) = {(} colocar X Y na célula [X, (] S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( X Y Y

10 LL(1) Tabela do parser –Produção: X Y (3) –First(Y) = {(} colocar Y ( na célula [Y, (] –como X pode derivar (via Y) determinar Follow(X) = { } S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( X Y Y

11 LL(1) Tabela do parser –Produção: Y ( Y ) (4) –First(( Y )) = {(} colocar Y ( Y ) na célula [Y, (] S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( X Y Y Y ( Y )

12 LL(1) Tabela do parser –Produção: Y (5) –Follow(Y) = {)} colocar Y na célula [Y, )] S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( X Y Y Y ( Y ) Y

13 LL(1) Tabela do parser –Já foram analisadas todas as produções da gramática –A tabela está completa S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) Não- terminais Terminais () S S X X X ( X Y Y Y ( Y )Y

14 LL(1) Não- terminais Terminais () S S X X X ( X Y Y Y ( Y )Y Conflito entre duas produções a aplicar não é LL(1) Tabela do parser obtida directamente S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

15 Determinar o tipo de gramática: LR(0)

16 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 1.Identificar itens LR(0) S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

17 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 1.Identificar itens LR(0) 2.Construir DFA S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

18 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ s0

19 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) Adicionar ao estado s0 todos os itens com X no LHS e com RHS começado por S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ s0

20 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) Adicionar ao estado s0 todos os itens com X no LHS e com RHS começado por S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y s0

21 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) –Por cada item I adicionado ao estado s0 determinar closure(I) S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y s0

22 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) –Por cada item I adicionado ao estado s0 determinar closure(I) Closure(X () = { } S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y s0

23 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) –Por cada item I adicionado ao estado s0 determinar closure(I) Closure(X Y) S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y s0

24 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) –Por cada item I adicionado ao estado s0 determinar closure(I) Closure(X Y) S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0

25 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA –Começar com 1º item e associar-lhe um estado (s0) –Determinar closure(S X $) –Por cada item I adicionado ao estado s0 determinar closure(I) –Parar quando não houver mais itens para acrescentar a s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0

26 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA Depois de um estado estar completo Determinar transições possíveis Transição entre estados está relacionada com o símbolo que permite o avanço do ponto sobre esse mesmo símbolo S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0

27 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA Depois de um estado estar completo Determinar transições possíveis Transição entre estados está relacionada com o símbolo que permite o avanço do ponto sobre esse mesmo símbolo S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y

28 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y 2.Construir DFA Depois de um estado estar completo Determinar transições possíveis Por cada transição é adicionado um novo estado que contém o(s) item(itens) directamente obtido(s) pelo avanço do ponto S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y

29 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y Por cada transição é adicionado um novo estado que contém o(s) item(itens) directamente obtido(s) pelo avanço do ponto S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1

30 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y Por cada transição é adicionado um novo estado que contém o(s) item(itens) directamente obtido(s) pelo avanço do ponto S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1 X ( Y ( Y ) s2 X Y s3

31 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y Por cada novo estado repetir os passos que foram realizados no estado s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1 X ( Y ( Y ) s2 X Y s3

32 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1 X ( Y ( Y ) Y s2 X Y s3 Por cada novo estado repetir os passos que foram realizados no estado s0

33 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1 X ( Y ( Y ) Y s2 X Y s3 Parar quando não for possível adicionar novos estados ( Y

34 LR(0) Itens: S X $ X ( X Y Y ( Y ) Y S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) S X $ X ( X Y Y ( Y ) Y s0 X ( Y S X $ s1 X ( Y ( Y ) Y s2 X Y s3 Não adicionar um novo estado quando este contém os mesmos itens de um estado já existente ( Y

35 LR(0) S X $ X ( X Y Y ( Y ) Y s0 S X $ s1 X X ( Y ( Y ) Y s2 ( X Y s3 Y Y (Y ) s4 Y Y (Y ) s5 ) Y ( Y ) Y s6 ( Y ( S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

36 1.Identificar itens LR(0) 2.Construir DFA 3.Construir tabela do parser 4.Verificar se existem conflitos LR(0)

37 ()$XY S0Shift s2 Reduce (5) Goto s1goto s3 S1Accept S2Reduce (2) Reduce (5) Shift s6 Reduce (2) Reduce (5) Reduce (2) Reduce (5) Goto s4 S3Reduce (3) S4Shift s5 S5Reduce (4) S6Reduce (5) Shift s6 Reduce (5) Goto s4 Conflitos reduce / reduce e shift/reduce Conflito shift/reduce A gramática não é LR(0) Tabela do parser

38 Determinar o tipo de gramática: LR(1)

39 LR(1) Itens: S X $ ? X ( ( X ( ) X ( $ X ( ( X ( ) X ( $ X Y ( X Y ) X Y $ X Y ( X Y ) X Y $ Y ( Y ) ) Y ( Y ) ( Y ( Y ) $ Y ( Y ) ) Y ( Y ) ( Y ( Y ) $ Y ( Y ) ) Y ( Y ) ( Y ( Y ) $ Y ( Y ) ) Y ( Y ) ( Y ( Y ) $ Y ) Y ( Y $ 1.Identificar itens LR(1) Símbolos Terminais: ( e ) Símbolo de término da análise: $ 2.Construir DFA Mesmo procedimento do que para o LR(0) com diferenças na adição de itens a um estado S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

40 LR(1) S X $ ? s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) 2.Construir DFA –1º item I no estado s0

41 LR(1) S X $ ? X ( $ X Y $ s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) 2.Construir DFA –1º item I no estado s0 –Determinar closure(I): –X ( ( –X ( ) –X ( $ –X Y ( –X Y ) –X Y $ –Colocar apenas os itens do Closure cujo símbolo de lookhaed esteja contido no First($ ?) = {$} –X ( $ –X Y $

42 LR(1) S X $ ? X ( $ X Y $ s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) 2.Construir DFA –Por cada novo item I no estado determinar closure(I) closure( X ( $ ) = { } Closure( X Y $) = Y ( Y ) ) Y ( Y ) ( Y ( Y ) $ Y ) Y ( Y $

43 LR(1) S X $ ? X ( $ X Y $ Y ( Y ) $ Y $ s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) 2.Construir DFA –Por cada novo item I no estado determinar closure(I) –Colocar apenas os itens do Closure cujo símbolo de lookhaed esteja contido no First($) = {$} –Y ( Y ) $ –Y $

44 LR(1) S X $ ? X ( $ X Y $ Y ( Y ) $ Y $ s0 S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5) 2.Construir DFA –Determinar transições –Repetir as etapas de criação do DFA tal como no caso do LR(0)

45 LR(1) S X $ ? X ( $ X Y $ Y ( Y ) $ Y $ s0 S X $ ? s1 X X ( $ Y ( Y ) $ Y ( Y ) ) Y ) s2 ( X Y $ s3 Y Y (Y ) $ s4 Y Y (Y ) $ s5 ) Y ( Y ) ) Y ) s6 ( Y ( Y (Y ) ) s7 Y (Y ) ) s8 ) S X (1) X ( | Y (2, 3) Y ( Y ) | (4, 5)

46 1.Identificar itens LR(1) 2.Construir DFA 3.Construir tabela do parser –Reduções são colocadas nas colunas correspondentes a símbolos de lookahead no item que indica redução Ex: O item do estado s3: X Y $ implica a redução (3) na linha s3, coluna $ 4.Verificar se existem conflitos LR(1)

47 ()$XY S0Shift s2Goto s1goto s3 S1Accept S2Shift s6Reduce (5)Reduce (2)Goto s4 S3Reduce (3) S4Shift s5 S5Reduce (4) S6Shift s6Reduce (5)Goto s7 S7Shift s8 S8Reduce (4) A gramática é LR(1), pois não existem conflitos Tabela do parser


Carregar ppt "Determinar o tipo de gramática Compiladores João M. P. Cardoso."

Apresentações semelhantes


Anúncios Google