From 274cf721b36c0b3b8bfd2cbbb5a2366e7444137f Mon Sep 17 00:00:00 2001 From: Henrique Margotte <henriquemargotte@gmail.com> Date: Sun, 1 Dec 2024 12:32:01 -0300 Subject: [PATCH] parametros criados, mas deslocamento nao atualizado --- MEPA | 3 +- compilador.output | 1246 +++++++++++++++++++++++++-------------------- compilador.y | 17 +- teste7.pas | 10 + 4 files changed, 729 insertions(+), 547 deletions(-) create mode 100644 teste7.pas diff --git a/MEPA b/MEPA index bee9de5..12d551e 100644 --- a/MEPA +++ b/MEPA @@ -5,12 +5,11 @@ R01: ENPR 1 AMEM 1 DSVS R02 R02: NADA - CRCT 3 + CRVL 1,0 ARMZ 1,0 DMEM 1 R00: NADA CRCT 8 ARMZ 0,0 - CHPR R01,0 DMEM 0 PARA diff --git a/compilador.output b/compilador.output index 9400ad8..99564d2 100644 --- a/compilador.output +++ b/compilador.output @@ -9,7 +9,7 @@ Terminais sem uso na gramática NOT -Estado 70 conflitos: 1 de redução/redução +Estado 71 conflitos: 1 de redução/redução Gramática @@ -58,84 +58,99 @@ Gramática 24 $@7: ε - 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco + 25 declaracao_procedimento: PROCEDURE IDENT $@7 parametros_ou_nada PONTO_E_VIRGULA bloco - 26 comando_composto: T_BEGIN comandos T_END + 26 parametros_ou_nada: ABRE_PARENTESES paramentros_formais FECHA_PARENTESES + 27 | ε - 27 comandos: comando PONTO_E_VIRGULA comandos - 28 | comando PONTO_E_VIRGULA - 29 | ε + 28 paramentros_formais: secao_pfs + 29 | paramentros_formais PONTO_E_VIRGULA secao_pfs - 30 comando: numero DOIS_PONTOS comando_sem_rotulo - 31 | comando_sem_rotulo + 30 $@8: ε - 32 comando_sem_rotulo: atribuicao_ou_procedimento - 33 | comando_composto - 34 | comando_condicional - 35 | comando_repetitivo - 36 | leitura - 37 | escrita + 31 secao_pfs: $@8 lista_id_pf DOIS_PONTOS tipo - 38 $@8: ε + 32 lista_id_pf: parametro VIRGULA lista_id_pf + 33 | parametro - 39 atribuicao_ou_procedimento: IDENT $@8 atribuicao_ou_procedimento_token + 34 parametro: IDENT - 40 atribuicao_ou_procedimento_token: atribuicao - 41 | chamada_procedimento + 35 comando_composto: T_BEGIN comandos T_END - 42 $@9: ε + 36 comandos: comando PONTO_E_VIRGULA comandos + 37 | comando PONTO_E_VIRGULA + 38 | ε - 43 atribuicao: $@9 ATRIBUICAO expressao_simples + 39 comando: numero DOIS_PONTOS comando_sem_rotulo + 40 | comando_sem_rotulo - 44 chamada_procedimento: ε + 41 comando_sem_rotulo: atribuicao_ou_procedimento + 42 | comando_composto + 43 | comando_condicional + 44 | comando_repetitivo + 45 | leitura + 46 | escrita - 45 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 47 $@9: ε - 46 lista_leituras: lista_leituras VIRGULA simb_leitura - 47 | simb_leitura + 48 atribuicao_ou_procedimento: IDENT $@9 atribuicao_ou_procedimento_token - 48 simb_leitura: IDENT + 49 atribuicao_ou_procedimento_token: atribuicao + 50 | chamada_procedimento - 49 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 51 $@10: ε - 50 lista_escritas: lista_escritas VIRGULA expressao_simples - 51 | expressao_simples + 52 atribuicao: $@10 ATRIBUICAO expressao_simples - 52 expressao: expressao IGUAL expressao_simples - 53 | expressao DIFERENTE expressao_simples - 54 | expressao MENOR expressao_simples - 55 | expressao MENOR_IGUAL expressao_simples - 56 | expressao MAIOR expressao_simples - 57 | expressao MAIOR_IGUAL expressao_simples - 58 | expressao_simples + 53 chamada_procedimento: ε - 59 expressao_simples: expressao_simples MAIS termo - 60 | expressao_simples MENOS termo - 61 | termo + 54 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES - 62 termo: termo ASTERISCO fator - 63 | termo DIV fator - 64 | fator + 55 lista_leituras: lista_leituras VIRGULA simb_leitura + 56 | simb_leitura - 65 fator: IDENT - 66 | NUMERO + 57 simb_leitura: IDENT - 67 numero: NUMERO + 58 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES - 68 $@10: ε + 59 lista_escritas: lista_escritas VIRGULA expressao_simples + 60 | expressao_simples - 69 $@11: ε + 61 expressao: expressao IGUAL expressao_simples + 62 | expressao DIFERENTE expressao_simples + 63 | expressao MENOR expressao_simples + 64 | expressao MENOR_IGUAL expressao_simples + 65 | expressao MAIOR expressao_simples + 66 | expressao MAIOR_IGUAL expressao_simples + 67 | expressao_simples - 70 comando_repetitivo: $@10 WHILE expressao DO $@11 comando_sem_rotulo + 68 expressao_simples: expressao_simples MAIS termo + 69 | expressao_simples MENOS termo + 70 | termo - 71 comando_condicional: if_then cond_else + 71 termo: termo ASTERISCO fator + 72 | termo DIV fator + 73 | fator - 72 cond_else: ELSE comando_sem_rotulo - 73 | ε + 74 fator: IDENT + 75 | NUMERO - 74 $@12: ε + 76 numero: NUMERO - 75 if_then: IF expressao $@12 THEN comando_sem_rotulo + 77 $@11: ε + + 78 $@12: ε + + 79 comando_repetitivo: $@11 WHILE expressao DO $@12 comando_sem_rotulo + + 80 comando_condicional: if_then cond_else + + 81 cond_else: ELSE comando_sem_rotulo + 82 | ε + + 83 $@13: ε + + 84 if_then: IF expressao $@13 THEN comando_sem_rotulo Terminais, com as regras onde eles aparecem @@ -143,44 +158,44 @@ Terminais, com as regras onde eles aparecem $end (0) 0 error (256) PROGRAM (258) 2 - ABRE_PARENTESES (259) 2 45 49 - FECHA_PARENTESES (260) 2 45 49 - VIRGULA (261) 6 18 20 46 50 - PONTO_E_VIRGULA (262) 2 16 25 27 28 - DOIS_PONTOS (263) 16 30 + ABRE_PARENTESES (259) 2 26 54 58 + FECHA_PARENTESES (260) 2 26 54 58 + VIRGULA (261) 6 18 20 32 55 59 + PONTO_E_VIRGULA (262) 2 16 25 29 36 37 + DOIS_PONTOS (263) 16 31 39 PONTO (264) 2 - T_BEGIN (265) 26 - T_END (266) 26 + T_BEGIN (265) 35 + T_END (266) 35 VAR (267) 10 - IDENT (268) 2 17 18 19 20 21 25 39 48 65 - ATRIBUICAO (269) 43 + IDENT (268) 2 17 18 19 20 21 25 34 48 57 74 + ATRIBUICAO (269) 52 LABEL (270) 6 TYPE (271) ARRAY (272) PROCEDURE (273) 25 FUNCTION (274) GOTO (275) - IF (276) 75 - THEN (277) 75 - ELSE (278) 72 - WHILE (279) 70 - DO (280) 70 + IF (276) 84 + THEN (277) 84 + ELSE (278) 81 + WHILE (279) 79 + DO (280) 79 OR (281) - DIV (282) 63 + DIV (282) 72 AND (283) NOT (284) - IGUAL (285) 52 - DIFERENTE (286) 53 - MENOR_IGUAL (287) 55 - MAIOR_IGUAL (288) 57 - MENOR (289) 54 - MAIOR (290) 56 - MAIS (291) 59 - MENOS (292) 60 - ASTERISCO (293) 62 - NUMERO (294) 66 67 - READ (295) 45 - WRITE (296) 49 + IGUAL (285) 61 + DIFERENTE (286) 62 + MENOR_IGUAL (287) 64 + MAIOR_IGUAL (288) 66 + MENOR (289) 63 + MAIOR (290) 65 + MAIS (291) 68 + MENOS (292) 69 + ASTERISCO (293) 71 + NUMERO (294) 75 76 + READ (295) 54 + WRITE (296) 58 LOWER_THAN_ELSE (297) @@ -229,7 +244,7 @@ Não terminais com as regras onde eles aparecem à direita: 16 tipo (57) à esquerda: 17 - à direita: 16 + à direita: 16 31 lista_id_var (58) à esquerda: 18 19 à direita: 16 18 @@ -245,87 +260,105 @@ Não terminais com as regras onde eles aparecem $@7 (62) à esquerda: 24 à direita: 25 - comando_composto (63) - à esquerda: 26 - à direita: 5 33 - comandos (64) - à esquerda: 27 28 29 - à direita: 26 27 - comando (65) - à esquerda: 30 31 - à direita: 27 28 - comando_sem_rotulo (66) - à esquerda: 32 33 34 35 36 37 - à direita: 30 31 70 72 75 - atribuicao_ou_procedimento (67) - à esquerda: 39 - à direita: 32 - $@8 (68) - à esquerda: 38 - à direita: 39 - atribuicao_ou_procedimento_token (69) - à esquerda: 40 41 + parametros_ou_nada (63) + à esquerda: 26 27 + à direita: 25 + paramentros_formais (64) + à esquerda: 28 29 + à direita: 26 29 + secao_pfs (65) + à esquerda: 31 + à direita: 28 29 + $@8 (66) + à esquerda: 30 + à direita: 31 + lista_id_pf (67) + à esquerda: 32 33 + à direita: 31 32 + parametro (68) + à esquerda: 34 + à direita: 32 33 + comando_composto (69) + à esquerda: 35 + à direita: 5 42 + comandos (70) + à esquerda: 36 37 38 + à direita: 35 36 + comando (71) + à esquerda: 39 40 + à direita: 36 37 + comando_sem_rotulo (72) + à esquerda: 41 42 43 44 45 46 + à direita: 39 40 79 81 84 + atribuicao_ou_procedimento (73) + à esquerda: 48 + à direita: 41 + $@9 (74) + à esquerda: 47 + à direita: 48 + atribuicao_ou_procedimento_token (75) + à esquerda: 49 50 + à direita: 48 + atribuicao (76) + à esquerda: 52 + à direita: 49 + $@10 (77) + à esquerda: 51 + à direita: 52 + chamada_procedimento (78) + à esquerda: 53 + à direita: 50 + leitura (79) + à esquerda: 54 + à direita: 45 + lista_leituras (80) + à esquerda: 55 56 + à direita: 54 55 + simb_leitura (81) + à esquerda: 57 + à direita: 55 56 + escrita (82) + à esquerda: 58 + à direita: 46 + lista_escritas (83) + à esquerda: 59 60 + à direita: 58 59 + expressao (84) + à esquerda: 61 62 63 64 65 66 67 + à direita: 61 62 63 64 65 66 79 84 + expressao_simples (85) + à esquerda: 68 69 70 + à direita: 52 59 60 61 62 63 64 65 66 67 68 69 + termo (86) + à esquerda: 71 72 73 + à direita: 68 69 70 71 72 + fator (87) + à esquerda: 74 75 + à direita: 71 72 73 + numero (88) + à esquerda: 76 à direita: 39 - atribuicao (70) - à esquerda: 43 - à direita: 40 - $@9 (71) - à esquerda: 42 + comando_repetitivo (89) + à esquerda: 79 + à direita: 44 + $@11 (90) + à esquerda: 77 + à direita: 79 + $@12 (91) + à esquerda: 78 + à direita: 79 + comando_condicional (92) + à esquerda: 80 à direita: 43 - chamada_procedimento (72) - à esquerda: 44 - à direita: 41 - leitura (73) - à esquerda: 45 - à direita: 36 - lista_leituras (74) - à esquerda: 46 47 - à direita: 45 46 - simb_leitura (75) - à esquerda: 48 - à direita: 46 47 - escrita (76) - à esquerda: 49 - à direita: 37 - lista_escritas (77) - à esquerda: 50 51 - à direita: 49 50 - expressao (78) - à esquerda: 52 53 54 55 56 57 58 - à direita: 52 53 54 55 56 57 70 75 - expressao_simples (79) - à esquerda: 59 60 61 - à direita: 43 50 51 52 53 54 55 56 57 58 59 60 - termo (80) - à esquerda: 62 63 64 - à direita: 59 60 61 62 63 - fator (81) - à esquerda: 65 66 - à direita: 62 63 64 - numero (82) - à esquerda: 67 - à direita: 30 - comando_repetitivo (83) - à esquerda: 70 - à direita: 35 - $@10 (84) - à esquerda: 68 - à direita: 70 - $@11 (85) - à esquerda: 69 - à direita: 70 - comando_condicional (86) - à esquerda: 71 - à direita: 34 - cond_else (87) - à esquerda: 72 73 - à direita: 71 - if_then (88) - à esquerda: 75 - à direita: 71 - $@12 (89) - à esquerda: 74 - à direita: 75 + cond_else (93) + à esquerda: 81 82 + à direita: 80 + if_then (94) + à esquerda: 84 + à direita: 80 + $@13 (95) + à esquerda: 83 + à direita: 84 Estado 0 @@ -557,7 +590,7 @@ Estado 26 Estado 27 - 25 declaracao_procedimento: PROCEDURE • IDENT $@7 PONTO_E_VIRGULA bloco + 25 declaracao_procedimento: PROCEDURE • IDENT $@7 parametros_ou_nada PONTO_E_VIRGULA bloco IDENT deslocar, e ir ao estado 33 @@ -603,7 +636,7 @@ Estado 32 Estado 33 - 25 declaracao_procedimento: PROCEDURE IDENT • $@7 PONTO_E_VIRGULA bloco + 25 declaracao_procedimento: PROCEDURE IDENT • $@7 parametros_ou_nada PONTO_E_VIRGULA bloco $padrão reduzir usando a regra 24 ($@7) @@ -612,7 +645,7 @@ Estado 33 Estado 34 - 26 comando_composto: T_BEGIN • comandos T_END + 35 comando_composto: T_BEGIN • comandos T_END T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -621,8 +654,8 @@ Estado 34 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - WHILE reduzir usando a regra 68 ($@10) - $padrão reduzir usando a regra 29 (comandos) + WHILE reduzir usando a regra 77 ($@11) + $padrão reduzir usando a regra 38 (comandos) comando_composto ir ao estado 44 comandos ir ao estado 45 @@ -633,7 +666,7 @@ Estado 34 escrita ir ao estado 50 numero ir ao estado 51 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 @@ -663,141 +696,145 @@ Estado 37 Estado 38 - 25 declaracao_procedimento: PROCEDURE IDENT $@7 • PONTO_E_VIRGULA bloco + 25 declaracao_procedimento: PROCEDURE IDENT $@7 • parametros_ou_nada PONTO_E_VIRGULA bloco + + ABRE_PARENTESES deslocar, e ir ao estado 59 + + $padrão reduzir usando a regra 27 (parametros_ou_nada) - PONTO_E_VIRGULA deslocar, e ir ao estado 59 + parametros_ou_nada ir ao estado 60 Estado 39 - 39 atribuicao_ou_procedimento: IDENT • $@8 atribuicao_ou_procedimento_token + 48 atribuicao_ou_procedimento: IDENT • $@9 atribuicao_ou_procedimento_token - $padrão reduzir usando a regra 38 ($@8) + $padrão reduzir usando a regra 47 ($@9) - $@8 ir ao estado 60 + $@9 ir ao estado 61 Estado 40 - 75 if_then: IF • expressao $@12 THEN comando_sem_rotulo + 84 if_then: IF • expressao $@13 THEN comando_sem_rotulo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao ir ao estado 63 - expressao_simples ir ao estado 64 - termo ir ao estado 65 - fator ir ao estado 66 + expressao ir ao estado 64 + expressao_simples ir ao estado 65 + termo ir ao estado 66 + fator ir ao estado 67 Estado 41 - 67 numero: NUMERO • + 76 numero: NUMERO • - $padrão reduzir usando a regra 67 (numero) + $padrão reduzir usando a regra 76 (numero) Estado 42 - 45 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 54 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES - ABRE_PARENTESES deslocar, e ir ao estado 67 + ABRE_PARENTESES deslocar, e ir ao estado 68 Estado 43 - 49 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 58 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES - ABRE_PARENTESES deslocar, e ir ao estado 68 + ABRE_PARENTESES deslocar, e ir ao estado 69 Estado 44 - 33 comando_sem_rotulo: comando_composto • + 42 comando_sem_rotulo: comando_composto • - $padrão reduzir usando a regra 33 (comando_sem_rotulo) + $padrão reduzir usando a regra 42 (comando_sem_rotulo) Estado 45 - 26 comando_composto: T_BEGIN comandos • T_END + 35 comando_composto: T_BEGIN comandos • T_END - T_END deslocar, e ir ao estado 69 + T_END deslocar, e ir ao estado 70 Estado 46 - 27 comandos: comando • PONTO_E_VIRGULA comandos - 28 | comando • PONTO_E_VIRGULA + 36 comandos: comando • PONTO_E_VIRGULA comandos + 37 | comando • PONTO_E_VIRGULA - PONTO_E_VIRGULA deslocar, e ir ao estado 70 + PONTO_E_VIRGULA deslocar, e ir ao estado 71 Estado 47 - 31 comando: comando_sem_rotulo • + 40 comando: comando_sem_rotulo • - $padrão reduzir usando a regra 31 (comando) + $padrão reduzir usando a regra 40 (comando) Estado 48 - 32 comando_sem_rotulo: atribuicao_ou_procedimento • + 41 comando_sem_rotulo: atribuicao_ou_procedimento • - $padrão reduzir usando a regra 32 (comando_sem_rotulo) + $padrão reduzir usando a regra 41 (comando_sem_rotulo) Estado 49 - 36 comando_sem_rotulo: leitura • + 45 comando_sem_rotulo: leitura • - $padrão reduzir usando a regra 36 (comando_sem_rotulo) + $padrão reduzir usando a regra 45 (comando_sem_rotulo) Estado 50 - 37 comando_sem_rotulo: escrita • + 46 comando_sem_rotulo: escrita • - $padrão reduzir usando a regra 37 (comando_sem_rotulo) + $padrão reduzir usando a regra 46 (comando_sem_rotulo) Estado 51 - 30 comando: numero • DOIS_PONTOS comando_sem_rotulo + 39 comando: numero • DOIS_PONTOS comando_sem_rotulo - DOIS_PONTOS deslocar, e ir ao estado 71 + DOIS_PONTOS deslocar, e ir ao estado 72 Estado 52 - 35 comando_sem_rotulo: comando_repetitivo • + 44 comando_sem_rotulo: comando_repetitivo • - $padrão reduzir usando a regra 35 (comando_sem_rotulo) + $padrão reduzir usando a regra 44 (comando_sem_rotulo) Estado 53 - 70 comando_repetitivo: $@10 • WHILE expressao DO $@11 comando_sem_rotulo + 79 comando_repetitivo: $@11 • WHILE expressao DO $@12 comando_sem_rotulo - WHILE deslocar, e ir ao estado 72 + WHILE deslocar, e ir ao estado 73 Estado 54 - 34 comando_sem_rotulo: comando_condicional • + 43 comando_sem_rotulo: comando_condicional • - $padrão reduzir usando a regra 34 (comando_sem_rotulo) + $padrão reduzir usando a regra 43 (comando_sem_rotulo) Estado 55 - 71 comando_condicional: if_then • cond_else + 80 comando_condicional: if_then • cond_else - ELSE deslocar, e ir ao estado 73 + ELSE deslocar, e ir ao estado 74 - $padrão reduzir usando a regra 73 (cond_else) + $padrão reduzir usando a regra 82 (cond_else) - cond_else ir ao estado 74 + cond_else ir ao estado 75 Estado 56 @@ -820,135 +857,141 @@ Estado 58 $padrão reduzir usando a regra 15 ($@6) - $@6 ir ao estado 75 + $@6 ir ao estado 76 Estado 59 - 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA • bloco + 26 parametros_ou_nada: ABRE_PARENTESES • paramentros_formais FECHA_PARENTESES - LABEL deslocar, e ir ao estado 13 + $padrão reduzir usando a regra 30 ($@8) - $padrão reduzir usando a regra 7 (parte_declara_rotulos) - - bloco ir ao estado 76 - parte_declara_rotulos ir ao estado 15 + paramentros_formais ir ao estado 77 + secao_pfs ir ao estado 78 + $@8 ir ao estado 79 Estado 60 - 39 atribuicao_ou_procedimento: IDENT $@8 • atribuicao_ou_procedimento_token + 25 declaracao_procedimento: PROCEDURE IDENT $@7 parametros_ou_nada • PONTO_E_VIRGULA bloco - ATRIBUICAO reduzir usando a regra 42 ($@9) - $padrão reduzir usando a regra 44 (chamada_procedimento) - - atribuicao_ou_procedimento_token ir ao estado 77 - atribuicao ir ao estado 78 - $@9 ir ao estado 79 - chamada_procedimento ir ao estado 80 + PONTO_E_VIRGULA deslocar, e ir ao estado 80 Estado 61 - 65 fator: IDENT • + 48 atribuicao_ou_procedimento: IDENT $@9 • atribuicao_ou_procedimento_token + + ATRIBUICAO reduzir usando a regra 51 ($@10) + $padrão reduzir usando a regra 53 (chamada_procedimento) - $padrão reduzir usando a regra 65 (fator) + atribuicao_ou_procedimento_token ir ao estado 81 + atribuicao ir ao estado 82 + $@10 ir ao estado 83 + chamada_procedimento ir ao estado 84 Estado 62 - 66 fator: NUMERO • + 74 fator: IDENT • - $padrão reduzir usando a regra 66 (fator) + $padrão reduzir usando a regra 74 (fator) Estado 63 - 52 expressao: expressao • IGUAL expressao_simples - 53 | expressao • DIFERENTE expressao_simples - 54 | expressao • MENOR expressao_simples - 55 | expressao • MENOR_IGUAL expressao_simples - 56 | expressao • MAIOR expressao_simples - 57 | expressao • MAIOR_IGUAL expressao_simples - 75 if_then: IF expressao • $@12 THEN comando_sem_rotulo + 75 fator: NUMERO • - IGUAL deslocar, e ir ao estado 81 - DIFERENTE deslocar, e ir ao estado 82 - MENOR_IGUAL deslocar, e ir ao estado 83 - MAIOR_IGUAL deslocar, e ir ao estado 84 - MENOR deslocar, e ir ao estado 85 - MAIOR deslocar, e ir ao estado 86 - - $padrão reduzir usando a regra 74 ($@12) - - $@12 ir ao estado 87 + $padrão reduzir usando a regra 75 (fator) Estado 64 - 58 expressao: expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo + 61 expressao: expressao • IGUAL expressao_simples + 62 | expressao • DIFERENTE expressao_simples + 63 | expressao • MENOR expressao_simples + 64 | expressao • MENOR_IGUAL expressao_simples + 65 | expressao • MAIOR expressao_simples + 66 | expressao • MAIOR_IGUAL expressao_simples + 84 if_then: IF expressao • $@13 THEN comando_sem_rotulo + + IGUAL deslocar, e ir ao estado 85 + DIFERENTE deslocar, e ir ao estado 86 + MENOR_IGUAL deslocar, e ir ao estado 87 + MAIOR_IGUAL deslocar, e ir ao estado 88 + MENOR deslocar, e ir ao estado 89 + MAIOR deslocar, e ir ao estado 90 - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 83 ($@13) - $padrão reduzir usando a regra 58 (expressao) + $@13 ir ao estado 91 Estado 65 - 61 expressao_simples: termo • - 62 termo: termo • ASTERISCO fator - 63 | termo • DIV fator + 67 expressao: expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo - DIV deslocar, e ir ao estado 90 - ASTERISCO deslocar, e ir ao estado 91 + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 - $padrão reduzir usando a regra 61 (expressao_simples) + $padrão reduzir usando a regra 67 (expressao) Estado 66 - 64 termo: fator • + 70 expressao_simples: termo • + 71 termo: termo • ASTERISCO fator + 72 | termo • DIV fator - $padrão reduzir usando a regra 64 (termo) + DIV deslocar, e ir ao estado 94 + ASTERISCO deslocar, e ir ao estado 95 + $padrão reduzir usando a regra 70 (expressao_simples) -Estado 67 - 45 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES +Estado 67 - IDENT deslocar, e ir ao estado 92 + 73 termo: fator • - lista_leituras ir ao estado 93 - simb_leitura ir ao estado 94 + $padrão reduzir usando a regra 73 (termo) Estado 68 - 49 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES + 54 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 96 - lista_escritas ir ao estado 95 - expressao_simples ir ao estado 96 - termo ir ao estado 65 - fator ir ao estado 66 + lista_leituras ir ao estado 97 + simb_leitura ir ao estado 98 Estado 69 - 26 comando_composto: T_BEGIN comandos T_END • + 58 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - $padrão reduzir usando a regra 26 (comando_composto) + lista_escritas ir ao estado 99 + expressao_simples ir ao estado 100 + termo ir ao estado 66 + fator ir ao estado 67 Estado 70 - 27 comandos: comando PONTO_E_VIRGULA • comandos - 28 | comando PONTO_E_VIRGULA • + 35 comando_composto: T_BEGIN comandos T_END • + + $padrão reduzir usando a regra 35 (comando_composto) + + +Estado 71 + + 36 comandos: comando PONTO_E_VIRGULA • comandos + 37 | comando PONTO_E_VIRGULA • T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -957,13 +1000,13 @@ Estado 70 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - T_END reduzir usando a regra 28 (comandos) - T_END [reduzir usando a regra 29 (comandos)] - WHILE reduzir usando a regra 68 ($@10) - $padrão reduzir usando a regra 28 (comandos) + T_END reduzir usando a regra 37 (comandos) + T_END [reduzir usando a regra 38 (comandos)] + WHILE reduzir usando a regra 77 ($@11) + $padrão reduzir usando a regra 37 (comandos) comando_composto ir ao estado 44 - comandos ir ao estado 97 + comandos ir ao estado 101 comando ir ao estado 46 comando_sem_rotulo ir ao estado 47 atribuicao_ou_procedimento ir ao estado 48 @@ -971,14 +1014,14 @@ Estado 70 escrita ir ao estado 50 numero ir ao estado 51 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 -Estado 71 +Estado 72 - 30 comando: numero DOIS_PONTOS • comando_sem_rotulo + 39 comando: numero DOIS_PONTOS • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -986,35 +1029,35 @@ Estado 71 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 68 ($@10) + $padrão reduzir usando a regra 77 ($@11) comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 98 + comando_sem_rotulo ir ao estado 102 atribuicao_ou_procedimento ir ao estado 48 leitura ir ao estado 49 escrita ir ao estado 50 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 -Estado 72 +Estado 73 - 70 comando_repetitivo: $@10 WHILE • expressao DO $@11 comando_sem_rotulo + 79 comando_repetitivo: $@11 WHILE • expressao DO $@12 comando_sem_rotulo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao ir ao estado 99 - expressao_simples ir ao estado 64 - termo ir ao estado 65 - fator ir ao estado 66 + expressao ir ao estado 103 + expressao_simples ir ao estado 65 + termo ir ao estado 66 + fator ir ao estado 67 -Estado 73 +Estado 74 - 72 cond_else: ELSE • comando_sem_rotulo + 81 cond_else: ELSE • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -1022,367 +1065,446 @@ Estado 73 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 68 ($@10) + $padrão reduzir usando a regra 77 ($@11) comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 100 + comando_sem_rotulo ir ao estado 104 atribuicao_ou_procedimento ir ao estado 48 leitura ir ao estado 49 escrita ir ao estado 50 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 -Estado 74 - - 71 comando_condicional: if_then cond_else • - - $padrão reduzir usando a regra 71 (comando_condicional) - - Estado 75 - 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA + 80 comando_condicional: if_then cond_else • - PONTO_E_VIRGULA deslocar, e ir ao estado 101 + $padrão reduzir usando a regra 80 (comando_condicional) Estado 76 - 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco • + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA - $padrão reduzir usando a regra 25 (declaracao_procedimento) + PONTO_E_VIRGULA deslocar, e ir ao estado 105 Estado 77 - 39 atribuicao_ou_procedimento: IDENT $@8 atribuicao_ou_procedimento_token • + 26 parametros_ou_nada: ABRE_PARENTESES paramentros_formais • FECHA_PARENTESES + 29 paramentros_formais: paramentros_formais • PONTO_E_VIRGULA secao_pfs - $padrão reduzir usando a regra 39 (atribuicao_ou_procedimento) + FECHA_PARENTESES deslocar, e ir ao estado 106 + PONTO_E_VIRGULA deslocar, e ir ao estado 107 Estado 78 - 40 atribuicao_ou_procedimento_token: atribuicao • + 28 paramentros_formais: secao_pfs • - $padrão reduzir usando a regra 40 (atribuicao_ou_procedimento_token) + $padrão reduzir usando a regra 28 (paramentros_formais) Estado 79 - 43 atribuicao: $@9 • ATRIBUICAO expressao_simples + 31 secao_pfs: $@8 • lista_id_pf DOIS_PONTOS tipo - ATRIBUICAO deslocar, e ir ao estado 102 + IDENT deslocar, e ir ao estado 108 + + lista_id_pf ir ao estado 109 + parametro ir ao estado 110 Estado 80 - 41 atribuicao_ou_procedimento_token: chamada_procedimento • + 25 declaracao_procedimento: PROCEDURE IDENT $@7 parametros_ou_nada PONTO_E_VIRGULA • bloco - $padrão reduzir usando a regra 41 (atribuicao_ou_procedimento_token) + LABEL deslocar, e ir ao estado 13 + $padrão reduzir usando a regra 7 (parte_declara_rotulos) -Estado 81 + bloco ir ao estado 111 + parte_declara_rotulos ir ao estado 15 - 52 expressao: expressao IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 +Estado 81 - expressao_simples ir ao estado 103 - termo ir ao estado 65 - fator ir ao estado 66 + 48 atribuicao_ou_procedimento: IDENT $@9 atribuicao_ou_procedimento_token • + $padrão reduzir usando a regra 48 (atribuicao_ou_procedimento) -Estado 82 - 53 expressao: expressao DIFERENTE • expressao_simples +Estado 82 - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 49 atribuicao_ou_procedimento_token: atribuicao • - expressao_simples ir ao estado 104 - termo ir ao estado 65 - fator ir ao estado 66 + $padrão reduzir usando a regra 49 (atribuicao_ou_procedimento_token) Estado 83 - 55 expressao: expressao MENOR_IGUAL • expressao_simples + 52 atribuicao: $@10 • ATRIBUICAO expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 - - expressao_simples ir ao estado 105 - termo ir ao estado 65 - fator ir ao estado 66 + ATRIBUICAO deslocar, e ir ao estado 112 Estado 84 - 57 expressao: expressao MAIOR_IGUAL • expressao_simples - - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 50 atribuicao_ou_procedimento_token: chamada_procedimento • - expressao_simples ir ao estado 106 - termo ir ao estado 65 - fator ir ao estado 66 + $padrão reduzir usando a regra 50 (atribuicao_ou_procedimento_token) Estado 85 - 54 expressao: expressao MENOR • expressao_simples + 61 expressao: expressao IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao_simples ir ao estado 107 - termo ir ao estado 65 - fator ir ao estado 66 + expressao_simples ir ao estado 113 + termo ir ao estado 66 + fator ir ao estado 67 Estado 86 - 56 expressao: expressao MAIOR • expressao_simples + 62 expressao: expressao DIFERENTE • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao_simples ir ao estado 108 - termo ir ao estado 65 - fator ir ao estado 66 + expressao_simples ir ao estado 114 + termo ir ao estado 66 + fator ir ao estado 67 Estado 87 - 75 if_then: IF expressao $@12 • THEN comando_sem_rotulo + 64 expressao: expressao MENOR_IGUAL • expressao_simples + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - THEN deslocar, e ir ao estado 109 + expressao_simples ir ao estado 115 + termo ir ao estado 66 + fator ir ao estado 67 Estado 88 - 59 expressao_simples: expressao_simples MAIS • termo + 66 expressao: expressao MAIOR_IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - termo ir ao estado 110 - fator ir ao estado 66 + expressao_simples ir ao estado 116 + termo ir ao estado 66 + fator ir ao estado 67 Estado 89 - 60 expressao_simples: expressao_simples MENOS • termo + 63 expressao: expressao MENOR • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - termo ir ao estado 111 - fator ir ao estado 66 + expressao_simples ir ao estado 117 + termo ir ao estado 66 + fator ir ao estado 67 Estado 90 - 63 termo: termo DIV • fator + 65 expressao: expressao MAIOR • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - fator ir ao estado 112 + expressao_simples ir ao estado 118 + termo ir ao estado 66 + fator ir ao estado 67 Estado 91 - 62 termo: termo ASTERISCO • fator + 84 if_then: IF expressao $@13 • THEN comando_sem_rotulo - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 - - fator ir ao estado 113 + THEN deslocar, e ir ao estado 119 Estado 92 - 48 simb_leitura: IDENT • + 68 expressao_simples: expressao_simples MAIS • termo + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - $padrão reduzir usando a regra 48 (simb_leitura) + termo ir ao estado 120 + fator ir ao estado 67 Estado 93 - 45 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES - 46 lista_leituras: lista_leituras • VIRGULA simb_leitura + 69 expressao_simples: expressao_simples MENOS • termo + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - FECHA_PARENTESES deslocar, e ir ao estado 114 - VIRGULA deslocar, e ir ao estado 115 + termo ir ao estado 121 + fator ir ao estado 67 Estado 94 - 47 lista_leituras: simb_leitura • + 72 termo: termo DIV • fator - $padrão reduzir usando a regra 47 (lista_leituras) + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + + fator ir ao estado 122 Estado 95 - 49 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES - 50 lista_escritas: lista_escritas • VIRGULA expressao_simples + 71 termo: termo ASTERISCO • fator - FECHA_PARENTESES deslocar, e ir ao estado 116 - VIRGULA deslocar, e ir ao estado 117 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + fator ir ao estado 123 -Estado 96 - 51 lista_escritas: expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo +Estado 96 - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 57 simb_leitura: IDENT • - $padrão reduzir usando a regra 51 (lista_escritas) + $padrão reduzir usando a regra 57 (simb_leitura) Estado 97 - 27 comandos: comando PONTO_E_VIRGULA comandos • + 54 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES + 55 lista_leituras: lista_leituras • VIRGULA simb_leitura - $padrão reduzir usando a regra 27 (comandos) + FECHA_PARENTESES deslocar, e ir ao estado 124 + VIRGULA deslocar, e ir ao estado 125 Estado 98 - 30 comando: numero DOIS_PONTOS comando_sem_rotulo • + 56 lista_leituras: simb_leitura • - $padrão reduzir usando a regra 30 (comando) + $padrão reduzir usando a regra 56 (lista_leituras) Estado 99 - 52 expressao: expressao • IGUAL expressao_simples - 53 | expressao • DIFERENTE expressao_simples - 54 | expressao • MENOR expressao_simples - 55 | expressao • MENOR_IGUAL expressao_simples - 56 | expressao • MAIOR expressao_simples - 57 | expressao • MAIOR_IGUAL expressao_simples - 70 comando_repetitivo: $@10 WHILE expressao • DO $@11 comando_sem_rotulo + 58 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES + 59 lista_escritas: lista_escritas • VIRGULA expressao_simples - DO deslocar, e ir ao estado 118 - IGUAL deslocar, e ir ao estado 81 - DIFERENTE deslocar, e ir ao estado 82 - MENOR_IGUAL deslocar, e ir ao estado 83 - MAIOR_IGUAL deslocar, e ir ao estado 84 - MENOR deslocar, e ir ao estado 85 - MAIOR deslocar, e ir ao estado 86 + FECHA_PARENTESES deslocar, e ir ao estado 126 + VIRGULA deslocar, e ir ao estado 127 Estado 100 - 72 cond_else: ELSE comando_sem_rotulo • + 60 lista_escritas: expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 72 (cond_else) + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 60 (lista_escritas) Estado 101 - 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • + 36 comandos: comando PONTO_E_VIRGULA comandos • - $padrão reduzir usando a regra 16 (declara_var) + $padrão reduzir usando a regra 36 (comandos) Estado 102 - 43 atribuicao: $@9 ATRIBUICAO • expressao_simples - - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + 39 comando: numero DOIS_PONTOS comando_sem_rotulo • - expressao_simples ir ao estado 119 - termo ir ao estado 65 - fator ir ao estado 66 + $padrão reduzir usando a regra 39 (comando) Estado 103 - 52 expressao: expressao IGUAL expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 61 expressao: expressao • IGUAL expressao_simples + 62 | expressao • DIFERENTE expressao_simples + 63 | expressao • MENOR expressao_simples + 64 | expressao • MENOR_IGUAL expressao_simples + 65 | expressao • MAIOR expressao_simples + 66 | expressao • MAIOR_IGUAL expressao_simples + 79 comando_repetitivo: $@11 WHILE expressao • DO $@12 comando_sem_rotulo - $padrão reduzir usando a regra 52 (expressao) + DO deslocar, e ir ao estado 128 + IGUAL deslocar, e ir ao estado 85 + DIFERENTE deslocar, e ir ao estado 86 + MENOR_IGUAL deslocar, e ir ao estado 87 + MAIOR_IGUAL deslocar, e ir ao estado 88 + MENOR deslocar, e ir ao estado 89 + MAIOR deslocar, e ir ao estado 90 Estado 104 - 53 expressao: expressao DIFERENTE expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo + 81 cond_else: ELSE comando_sem_rotulo • - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 - - $padrão reduzir usando a regra 53 (expressao) + $padrão reduzir usando a regra 81 (cond_else) Estado 105 - 55 expressao: expressao MENOR_IGUAL expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • - $padrão reduzir usando a regra 55 (expressao) + $padrão reduzir usando a regra 16 (declara_var) Estado 106 - 57 expressao: expressao MAIOR_IGUAL expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 26 parametros_ou_nada: ABRE_PARENTESES paramentros_formais FECHA_PARENTESES • - $padrão reduzir usando a regra 57 (expressao) + $padrão reduzir usando a regra 26 (parametros_ou_nada) Estado 107 - 54 expressao: expressao MENOR expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo + 29 paramentros_formais: paramentros_formais PONTO_E_VIRGULA • secao_pfs - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 30 ($@8) - $padrão reduzir usando a regra 54 (expressao) + secao_pfs ir ao estado 129 + $@8 ir ao estado 79 Estado 108 - 56 expressao: expressao MAIOR expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 34 parametro: IDENT • - $padrão reduzir usando a regra 56 (expressao) + $padrão reduzir usando a regra 34 (parametro) Estado 109 - 75 if_then: IF expressao $@12 THEN • comando_sem_rotulo + 31 secao_pfs: $@8 lista_id_pf • DOIS_PONTOS tipo + + DOIS_PONTOS deslocar, e ir ao estado 130 + + +Estado 110 + + 32 lista_id_pf: parametro • VIRGULA lista_id_pf + 33 | parametro • + + VIRGULA deslocar, e ir ao estado 131 + + $padrão reduzir usando a regra 33 (lista_id_pf) + + +Estado 111 + + 25 declaracao_procedimento: PROCEDURE IDENT $@7 parametros_ou_nada PONTO_E_VIRGULA bloco • + + $padrão reduzir usando a regra 25 (declaracao_procedimento) + + +Estado 112 + + 52 atribuicao: $@10 ATRIBUICAO • expressao_simples + + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 + + expressao_simples ir ao estado 132 + termo ir ao estado 66 + fator ir ao estado 67 + + +Estado 113 + + 61 expressao: expressao IGUAL expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 61 (expressao) + + +Estado 114 + + 62 expressao: expressao DIFERENTE expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 62 (expressao) + + +Estado 115 + + 64 expressao: expressao MENOR_IGUAL expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 64 (expressao) + + +Estado 116 + + 66 expressao: expressao MAIOR_IGUAL expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 66 (expressao) + + +Estado 117 + + 63 expressao: expressao MENOR expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 63 (expressao) + + +Estado 118 + + 65 expressao: expressao MAIOR expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 65 (expressao) + + +Estado 119 + + 84 if_then: IF expressao $@13 THEN • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -1390,142 +1512,168 @@ Estado 109 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 68 ($@10) + $padrão reduzir usando a regra 77 ($@11) comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 120 + comando_sem_rotulo ir ao estado 133 atribuicao_ou_procedimento ir ao estado 48 leitura ir ao estado 49 escrita ir ao estado 50 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 -Estado 110 +Estado 120 - 59 expressao_simples: expressao_simples MAIS termo • - 62 termo: termo • ASTERISCO fator - 63 | termo • DIV fator + 68 expressao_simples: expressao_simples MAIS termo • + 71 termo: termo • ASTERISCO fator + 72 | termo • DIV fator - DIV deslocar, e ir ao estado 90 - ASTERISCO deslocar, e ir ao estado 91 + DIV deslocar, e ir ao estado 94 + ASTERISCO deslocar, e ir ao estado 95 - $padrão reduzir usando a regra 59 (expressao_simples) + $padrão reduzir usando a regra 68 (expressao_simples) -Estado 111 +Estado 121 - 60 expressao_simples: expressao_simples MENOS termo • - 62 termo: termo • ASTERISCO fator - 63 | termo • DIV fator + 69 expressao_simples: expressao_simples MENOS termo • + 71 termo: termo • ASTERISCO fator + 72 | termo • DIV fator - DIV deslocar, e ir ao estado 90 - ASTERISCO deslocar, e ir ao estado 91 + DIV deslocar, e ir ao estado 94 + ASTERISCO deslocar, e ir ao estado 95 - $padrão reduzir usando a regra 60 (expressao_simples) + $padrão reduzir usando a regra 69 (expressao_simples) -Estado 112 +Estado 122 - 63 termo: termo DIV fator • + 72 termo: termo DIV fator • - $padrão reduzir usando a regra 63 (termo) + $padrão reduzir usando a regra 72 (termo) -Estado 113 +Estado 123 - 62 termo: termo ASTERISCO fator • + 71 termo: termo ASTERISCO fator • - $padrão reduzir usando a regra 62 (termo) + $padrão reduzir usando a regra 71 (termo) -Estado 114 +Estado 124 - 45 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • + 54 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • - $padrão reduzir usando a regra 45 (leitura) + $padrão reduzir usando a regra 54 (leitura) -Estado 115 +Estado 125 - 46 lista_leituras: lista_leituras VIRGULA • simb_leitura + 55 lista_leituras: lista_leituras VIRGULA • simb_leitura - IDENT deslocar, e ir ao estado 92 + IDENT deslocar, e ir ao estado 96 - simb_leitura ir ao estado 121 + simb_leitura ir ao estado 134 -Estado 116 +Estado 126 - 49 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • + 58 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • - $padrão reduzir usando a regra 49 (escrita) + $padrão reduzir usando a regra 58 (escrita) -Estado 117 +Estado 127 - 50 lista_escritas: lista_escritas VIRGULA • expressao_simples + 59 lista_escritas: lista_escritas VIRGULA • expressao_simples - IDENT deslocar, e ir ao estado 61 - NUMERO deslocar, e ir ao estado 62 + IDENT deslocar, e ir ao estado 62 + NUMERO deslocar, e ir ao estado 63 - expressao_simples ir ao estado 122 - termo ir ao estado 65 - fator ir ao estado 66 + expressao_simples ir ao estado 135 + termo ir ao estado 66 + fator ir ao estado 67 -Estado 118 +Estado 128 - 70 comando_repetitivo: $@10 WHILE expressao DO • $@11 comando_sem_rotulo + 79 comando_repetitivo: $@11 WHILE expressao DO • $@12 comando_sem_rotulo - $padrão reduzir usando a regra 69 ($@11) + $padrão reduzir usando a regra 78 ($@12) - $@11 ir ao estado 123 + $@12 ir ao estado 136 -Estado 119 +Estado 129 - 43 atribuicao: $@9 ATRIBUICAO expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo + 29 paramentros_formais: paramentros_formais PONTO_E_VIRGULA secao_pfs • - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 29 (paramentros_formais) - $padrão reduzir usando a regra 43 (atribuicao) +Estado 130 -Estado 120 + 31 secao_pfs: $@8 lista_id_pf DOIS_PONTOS • tipo - 75 if_then: IF expressao $@12 THEN comando_sem_rotulo • + IDENT deslocar, e ir ao estado 57 - $padrão reduzir usando a regra 75 (if_then) + tipo ir ao estado 137 -Estado 121 +Estado 131 - 46 lista_leituras: lista_leituras VIRGULA simb_leitura • + 32 lista_id_pf: parametro VIRGULA • lista_id_pf - $padrão reduzir usando a regra 46 (lista_leituras) + IDENT deslocar, e ir ao estado 108 + lista_id_pf ir ao estado 138 + parametro ir ao estado 110 -Estado 122 - 50 lista_escritas: lista_escritas VIRGULA expressao_simples • - 59 expressao_simples: expressao_simples • MAIS termo - 60 | expressao_simples • MENOS termo +Estado 132 - MAIS deslocar, e ir ao estado 88 - MENOS deslocar, e ir ao estado 89 + 52 atribuicao: $@10 ATRIBUICAO expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 50 (lista_escritas) + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + $padrão reduzir usando a regra 52 (atribuicao) -Estado 123 - 70 comando_repetitivo: $@10 WHILE expressao DO $@11 • comando_sem_rotulo +Estado 133 + + 84 if_then: IF expressao $@13 THEN comando_sem_rotulo • + + $padrão reduzir usando a regra 84 (if_then) + + +Estado 134 + + 55 lista_leituras: lista_leituras VIRGULA simb_leitura • + + $padrão reduzir usando a regra 55 (lista_leituras) + + +Estado 135 + + 59 lista_escritas: lista_escritas VIRGULA expressao_simples • + 68 expressao_simples: expressao_simples • MAIS termo + 69 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 92 + MENOS deslocar, e ir ao estado 93 + + $padrão reduzir usando a regra 59 (lista_escritas) + + +Estado 136 + + 79 comando_repetitivo: $@11 WHILE expressao DO $@12 • comando_sem_rotulo T_BEGIN deslocar, e ir ao estado 34 IDENT deslocar, e ir ao estado 39 @@ -1533,21 +1681,35 @@ Estado 123 READ deslocar, e ir ao estado 42 WRITE deslocar, e ir ao estado 43 - $padrão reduzir usando a regra 68 ($@10) + $padrão reduzir usando a regra 77 ($@11) comando_composto ir ao estado 44 - comando_sem_rotulo ir ao estado 124 + comando_sem_rotulo ir ao estado 139 atribuicao_ou_procedimento ir ao estado 48 leitura ir ao estado 49 escrita ir ao estado 50 comando_repetitivo ir ao estado 52 - $@10 ir ao estado 53 + $@11 ir ao estado 53 comando_condicional ir ao estado 54 if_then ir ao estado 55 -Estado 124 +Estado 137 + + 31 secao_pfs: $@8 lista_id_pf DOIS_PONTOS tipo • + + $padrão reduzir usando a regra 31 (secao_pfs) + + +Estado 138 + + 32 lista_id_pf: parametro VIRGULA lista_id_pf • + + $padrão reduzir usando a regra 32 (lista_id_pf) + + +Estado 139 - 70 comando_repetitivo: $@10 WHILE expressao DO $@11 comando_sem_rotulo • + 79 comando_repetitivo: $@11 WHILE expressao DO $@12 comando_sem_rotulo • - $padrão reduzir usando a regra 70 (comando_repetitivo) + $padrão reduzir usando a regra 79 (comando_repetitivo) diff --git a/compilador.y b/compilador.y index d13a16b..3376b86 100644 --- a/compilador.y +++ b/compilador.y @@ -189,13 +189,24 @@ parametros_ou_nada: ABRE_PARENTESES paramentros_formais FECHA_PARENTESES ; paramentros_formais: secao_pfs - | paramentros PONTO_E_VIRGULA secao_pfs + | paramentros_formais PONTO_E_VIRGULA secao_pfs ; -secao_pfs: lista_id_pf DOIS_PONTOS tipo +secao_pfs: {num_vars = 0;} + lista_id_pf DOIS_PONTOS tipo +; -parametro: IDENT { +lista_id_pf: parametro VIRGULA lista_id_pf + | parametro; +; +parametro: IDENT { + num_vars += 1; + info_t info; + info.pf.tipo = NSEI; + info.pf.desloc = NSEI; + info.pf.passagem = VLR; + insere_ts(token,PF,nivel_lexico,info,ts); } ; diff --git a/teste7.pas b/teste7.pas new file mode 100644 index 0000000..27c3996 --- /dev/null +++ b/teste7.pas @@ -0,0 +1,10 @@ +program proc1 (input, output); + var x: integer; + procedure p(a: integer); + var z: integer; + begin + z := a; + end +begin + x := 8; +end. \ No newline at end of file -- GitLab