From dc1c13f64f5682280538a2ffc0290518ba6814a6 Mon Sep 17 00:00:00 2001 From: Henrique Margotte <henriquemargotte@gmail.com> Date: Sat, 30 Nov 2024 20:19:01 -0300 Subject: [PATCH] declara procedimento --- MEPA | 56 +- compilador | Bin 41384 -> 45480 bytes compilador.output | 1450 +++++++++++++++++++++++---------------------- compilador.tab.c | 522 +++++++++------- compilador.y | 41 +- teste6.pas | 5 + 6 files changed, 1104 insertions(+), 970 deletions(-) diff --git a/MEPA b/MEPA index dd41d3f..4c145d8 100644 --- a/MEPA +++ b/MEPA @@ -1,49 +1,15 @@ INPP - AMEM 2 - LEIT - ARMZ 0,1 - CRCT 0 - ARMZ 0,0 -R00: NADA - CRVL 0,0 - CRVL 0,1 - CMME - DSVF R01 - CRVL 0,0 - CRCT 2 - DIVI - CRCT 2 - MULT - CRVL 0,0 - CMIG - DSVF R02 - CRVL 0,0 - IMPR - CRCT 0 - IMPR - CRVL 0,0 - CRCT 0 - CMIG - DSVF R04 - CRCT 2 - IMPR - DSVS R05 -R04: NADA - CRCT 3 - IMPR -R05: NADA - DSVS R03 -R02: NADA - CRVL 0,0 - IMPR - CRCT 1 - IMPR -R03: NADA - CRVL 0,0 - CRCT 1 - SOMA - ARMZ 0,0 + AMEM 1 DSVS R00 -R01: NADA +R01: ENPR 1 + AMEM 1 + DSVS R02 +R02: NADA + CRCT 3 + ARMZ 1,1 DMEM 2 +R00: NADA + CRCT 8 + ARMZ 0,0 + DMEM 0 PARA diff --git a/compilador b/compilador index dec53b9f92a3cf7349e7606481764fe2e37bab4f..fc42e009c85e53b9b110f44d7c8229b032d97328 100755 GIT binary patch delta 14630 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 QwC7v_k(6Sb>@`ac0Au247XSbN delta 14135 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 Cz9~Ea diff --git a/compilador.output b/compilador.output index da63078..903e78d 100644 --- a/compilador.output +++ b/compilador.output @@ -9,7 +9,7 @@ Terminais sem uso na gramática NOT -Estado 61 conflitos: 1 de redução/redução +Estado 70 conflitos: 1 de redução/redução Gramática @@ -20,107 +20,113 @@ Gramática 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 3 bloco: parte_declara_rotulos parte_declara_vars parte_declara_subrotinas comando_composto + 3 $@2: ε - 4 parte_declara_rotulos: LABEL VIRGULA - 5 | ε + 4 $@3: ε - 6 parte_declara_vars: var + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto - 7 $@2: ε + 6 parte_declara_rotulos: LABEL VIRGULA + 7 | ε - 8 var: $@2 VAR declara_vars - 9 | ε + 8 parte_declara_vars: var - 10 declara_vars: declara_vars declara_var - 11 | declara_var + 9 $@4: ε - 12 $@3: ε + 10 var: $@4 VAR declara_vars + 11 | ε - 13 $@4: ε + 12 declara_vars: declara_vars declara_var + 13 | declara_var - 14 declara_var: $@3 lista_id_var DOIS_PONTOS tipo $@4 PONTO_E_VIRGULA + 14 $@5: ε - 15 tipo: IDENT + 15 $@6: ε - 16 lista_id_var: lista_id_var VIRGULA IDENT - 17 | IDENT + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA - 18 lista_idents: lista_idents VIRGULA IDENT + 17 tipo: IDENT + + 18 lista_id_var: lista_id_var VIRGULA IDENT 19 | IDENT - 20 parte_declara_subrotinas: declaracao_procedimento + 20 lista_idents: lista_idents VIRGULA IDENT + 21 | IDENT + + 22 parte_declara_subrotinas: parte_declara_subrotinas declaracao_procedimento + 23 | ε - 21 declaracao_procedimento: PROCEDURE IDENT - 22 | ε + 24 $@7: ε - 23 comando_composto: T_BEGIN comandos T_END + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco - 24 comandos: comando PONTO_E_VIRGULA comandos - 25 | comando PONTO_E_VIRGULA - 26 | ε + 26 comando_composto: T_BEGIN comandos T_END - 27 comando: numero DOIS_PONTOS comando_sem_rotulo - 28 | comando_sem_rotulo + 27 comandos: comando PONTO_E_VIRGULA comandos + 28 | comando PONTO_E_VIRGULA + 29 | ε - 29 comando_sem_rotulo: atribuicao - 30 | comando_composto - 31 | comando_condicional - 32 | comando_repetitivo - 33 | leitura - 34 | escrita + 30 comando: numero DOIS_PONTOS comando_sem_rotulo + 31 | comando_sem_rotulo - 35 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 32 comando_sem_rotulo: atribuicao + 33 | comando_composto + 34 | comando_condicional + 35 | comando_repetitivo + 36 | leitura + 37 | escrita - 36 lista_leituras: lista_leituras VIRGULA simb_leitura - 37 | simb_leitura + 38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES - 38 simb_leitura: IDENT + 39 lista_leituras: lista_leituras VIRGULA simb_leitura + 40 | simb_leitura - 39 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 41 simb_leitura: IDENT - 40 lista_escritas: lista_escritas VIRGULA expressao_simples - 41 | expressao_simples + 42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES - 42 expressao: expressao IGUAL expressao_simples - 43 | expressao DIFERENTE expressao_simples - 44 | expressao MENOR expressao_simples - 45 | expressao MENOR_IGUAL expressao_simples - 46 | expressao MAIOR expressao_simples - 47 | expressao MAIOR_IGUAL expressao_simples - 48 | expressao_simples + 43 lista_escritas: lista_escritas VIRGULA expressao_simples + 44 | expressao_simples - 49 expressao_simples: expressao_simples MAIS termo - 50 | expressao_simples MENOS termo - 51 | termo + 45 expressao: expressao IGUAL expressao_simples + 46 | expressao DIFERENTE expressao_simples + 47 | expressao MENOR expressao_simples + 48 | expressao MENOR_IGUAL expressao_simples + 49 | expressao MAIOR expressao_simples + 50 | expressao MAIOR_IGUAL expressao_simples + 51 | expressao_simples - 52 termo: termo ASTERISCO fator - 53 | termo DIV fator - 54 | fator + 52 expressao_simples: expressao_simples MAIS termo + 53 | expressao_simples MENOS termo + 54 | termo - 55 $@5: ε + 55 termo: termo ASTERISCO fator + 56 | termo DIV fator + 57 | fator - 56 atribuicao: IDENT $@5 ATRIBUICAO expressao_simples + 58 $@8: ε - 57 fator: IDENT - 58 | NUMERO + 59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples - 59 numero: NUMERO + 60 fator: IDENT + 61 | NUMERO - 60 $@6: ε + 62 numero: NUMERO - 61 $@7: ε + 63 $@9: ε - 62 comando_repetitivo: $@6 WHILE expressao DO $@7 comando_sem_rotulo + 64 $@10: ε - 63 comando_condicional: if_then cond_else + 65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo - 64 cond_else: ELSE comando_sem_rotulo - 65 | ε + 66 comando_condicional: if_then cond_else - 66 $@8: ε + 67 cond_else: ELSE comando_sem_rotulo + 68 | ε - 67 if_then: IF expressao $@8 THEN comando_sem_rotulo + 69 $@11: ε + + 70 if_then: IF expressao $@11 THEN comando_sem_rotulo Terminais, com as regras onde eles aparecem @@ -128,44 +134,44 @@ Terminais, com as regras onde eles aparecem $end (0) 0 error (256) PROGRAM (258) 2 - ABRE_PARENTESES (259) 2 35 39 - FECHA_PARENTESES (260) 2 35 39 - VIRGULA (261) 4 16 18 36 40 - PONTO_E_VIRGULA (262) 2 14 24 25 - DOIS_PONTOS (263) 14 27 + ABRE_PARENTESES (259) 2 38 42 + FECHA_PARENTESES (260) 2 38 42 + VIRGULA (261) 6 18 20 39 43 + PONTO_E_VIRGULA (262) 2 16 25 27 28 + DOIS_PONTOS (263) 16 30 PONTO (264) 2 - T_BEGIN (265) 23 - T_END (266) 23 - VAR (267) 8 - IDENT (268) 2 15 16 17 18 19 21 38 56 57 - ATRIBUICAO (269) 56 - LABEL (270) 4 + T_BEGIN (265) 26 + T_END (266) 26 + VAR (267) 10 + IDENT (268) 2 17 18 19 20 21 25 41 59 60 + ATRIBUICAO (269) 59 + LABEL (270) 6 TYPE (271) ARRAY (272) - PROCEDURE (273) 21 + PROCEDURE (273) 25 FUNCTION (274) GOTO (275) - IF (276) 67 - THEN (277) 67 - ELSE (278) 64 - WHILE (279) 62 - DO (280) 62 + IF (276) 70 + THEN (277) 70 + ELSE (278) 67 + WHILE (279) 65 + DO (280) 65 OR (281) - DIV (282) 53 + DIV (282) 56 AND (283) NOT (284) - IGUAL (285) 42 - DIFERENTE (286) 43 - MENOR_IGUAL (287) 45 - MAIOR_IGUAL (288) 47 - MENOR (289) 44 - MAIOR (290) 46 - MAIS (291) 49 - MENOS (292) 50 - ASTERISCO (293) 52 - NUMERO (294) 58 59 - READ (295) 35 - WRITE (296) 39 + IGUAL (285) 45 + DIFERENTE (286) 46 + MENOR_IGUAL (287) 48 + MAIOR_IGUAL (288) 50 + MENOR (289) 47 + MAIOR (290) 49 + MAIS (291) 52 + MENOS (292) 53 + ASTERISCO (293) 55 + NUMERO (294) 61 62 + READ (295) 38 + WRITE (296) 42 LOWER_THAN_ELSE (297) @@ -180,116 +186,125 @@ Não terminais com as regras onde eles aparecem à esquerda: 1 à direita: 2 bloco (46) + à esquerda: 5 + à direita: 2 25 + $@2 (47) à esquerda: 3 - à direita: 2 - parte_declara_rotulos (47) - à esquerda: 4 5 - à direita: 3 - parte_declara_vars (48) - à esquerda: 6 - à direita: 3 - var (49) - à esquerda: 8 9 - à direita: 6 - $@2 (50) - à esquerda: 7 - à direita: 8 - declara_vars (51) + à direita: 5 + $@3 (48) + à esquerda: 4 + à direita: 5 + parte_declara_rotulos (49) + à esquerda: 6 7 + à direita: 5 + parte_declara_vars (50) + à esquerda: 8 + à direita: 5 + var (51) à esquerda: 10 11 - à direita: 8 10 - declara_var (52) + à direita: 8 + $@4 (52) + à esquerda: 9 + à direita: 10 + declara_vars (53) + à esquerda: 12 13 + à direita: 10 12 + declara_var (54) + à esquerda: 16 + à direita: 12 13 + $@5 (55) à esquerda: 14 - à direita: 10 11 - $@3 (53) - à esquerda: 12 - à direita: 14 - $@4 (54) - à esquerda: 13 - à direita: 14 - tipo (55) + à direita: 16 + $@6 (56) à esquerda: 15 - à direita: 14 - lista_id_var (56) - à esquerda: 16 17 - à direita: 14 16 - lista_idents (57) + à direita: 16 + tipo (57) + à esquerda: 17 + à direita: 16 + lista_id_var (58) à esquerda: 18 19 - à direita: 2 18 - parte_declara_subrotinas (58) - à esquerda: 20 - à direita: 3 - declaracao_procedimento (59) - à esquerda: 21 22 - à direita: 20 - comando_composto (60) - à esquerda: 23 - à direita: 3 30 - comandos (61) - à esquerda: 24 25 26 - à direita: 23 24 - comando (62) - à esquerda: 27 28 - à direita: 24 25 - comando_sem_rotulo (63) - à esquerda: 29 30 31 32 33 34 - à direita: 27 28 62 64 67 - leitura (64) - à esquerda: 35 - à direita: 33 - lista_leituras (65) - à esquerda: 36 37 - à direita: 35 36 - simb_leitura (66) + à direita: 16 18 + lista_idents (59) + à esquerda: 20 21 + à direita: 2 20 + parte_declara_subrotinas (60) + à esquerda: 22 23 + à direita: 5 22 + declaracao_procedimento (61) + à esquerda: 25 + à direita: 22 + $@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 65 67 70 + leitura (67) à esquerda: 38 - à direita: 36 37 - escrita (67) - à esquerda: 39 - à direita: 34 - lista_escritas (68) - à esquerda: 40 41 + à direita: 36 + lista_leituras (68) + à esquerda: 39 40 + à direita: 38 39 + simb_leitura (69) + à esquerda: 41 à direita: 39 40 - expressao (69) - à esquerda: 42 43 44 45 46 47 48 - à direita: 42 43 44 45 46 47 62 67 - expressao_simples (70) - à esquerda: 49 50 51 - à direita: 40 41 42 43 44 45 46 47 48 49 50 56 - termo (71) + escrita (70) + à esquerda: 42 + à direita: 37 + lista_escritas (71) + à esquerda: 43 44 + à direita: 42 43 + expressao (72) + à esquerda: 45 46 47 48 49 50 51 + à direita: 45 46 47 48 49 50 65 70 + expressao_simples (73) à esquerda: 52 53 54 - à direita: 49 50 51 52 53 - atribuicao (72) - à esquerda: 56 - à direita: 29 - $@5 (73) - à esquerda: 55 - à direita: 56 - fator (74) - à esquerda: 57 58 - à direita: 52 53 54 - numero (75) + à direita: 43 44 45 46 47 48 49 50 51 52 53 59 + termo (74) + à esquerda: 55 56 57 + à direita: 52 53 54 55 56 + atribuicao (75) à esquerda: 59 - à direita: 27 - comando_repetitivo (76) - à esquerda: 62 à direita: 32 - $@6 (77) - à esquerda: 60 - à direita: 62 - $@7 (78) - à esquerda: 61 - à direita: 62 - comando_condicional (79) + $@8 (76) + à esquerda: 58 + à direita: 59 + fator (77) + à esquerda: 60 61 + à direita: 55 56 57 + numero (78) + à esquerda: 62 + à direita: 30 + comando_repetitivo (79) + à esquerda: 65 + à direita: 35 + $@9 (80) à esquerda: 63 - à direita: 31 - cond_else (80) - à esquerda: 64 65 - à direita: 63 - if_then (81) - à esquerda: 67 - à direita: 63 - $@8 (82) + à direita: 65 + $@10 (81) + à esquerda: 64 + à direita: 65 + comando_condicional (82) à esquerda: 66 - à direita: 67 + à direita: 34 + cond_else (83) + à esquerda: 67 68 + à direita: 66 + if_then (84) + à esquerda: 70 + à direita: 66 + $@11 (85) + à esquerda: 69 + à direita: 70 Estado 0 @@ -348,15 +363,15 @@ Estado 6 Estado 7 - 19 lista_idents: IDENT • + 21 lista_idents: IDENT • - $padrão reduzir usando a regra 19 (lista_idents) + $padrão reduzir usando a regra 21 (lista_idents) Estado 8 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents • FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 18 lista_idents: lista_idents • VIRGULA IDENT + 20 lista_idents: lista_idents • VIRGULA IDENT FECHA_PARENTESES deslocar, e ir ao estado 9 VIRGULA deslocar, e ir ao estado 10 @@ -371,7 +386,7 @@ Estado 9 Estado 10 - 18 lista_idents: lista_idents VIRGULA • IDENT + 20 lista_idents: lista_idents VIRGULA • IDENT IDENT deslocar, e ir ao estado 12 @@ -382,7 +397,7 @@ Estado 11 LABEL deslocar, e ir ao estado 13 - $padrão reduzir usando a regra 5 (parte_declara_rotulos) + $padrão reduzir usando a regra 7 (parte_declara_rotulos) bloco ir ao estado 14 parte_declara_rotulos ir ao estado 15 @@ -390,14 +405,14 @@ Estado 11 Estado 12 - 18 lista_idents: lista_idents VIRGULA IDENT • + 20 lista_idents: lista_idents VIRGULA IDENT • - $padrão reduzir usando a regra 18 (lista_idents) + $padrão reduzir usando a regra 20 (lista_idents) Estado 13 - 4 parte_declara_rotulos: LABEL • VIRGULA + 6 parte_declara_rotulos: LABEL • VIRGULA VIRGULA deslocar, e ir ao estado 16 @@ -411,21 +426,21 @@ Estado 14 Estado 15 - 3 bloco: parte_declara_rotulos • parte_declara_vars parte_declara_subrotinas comando_composto + 5 bloco: parte_declara_rotulos • parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto - VAR reduzir usando a regra 7 ($@2) - $padrão reduzir usando a regra 9 (var) + VAR reduzir usando a regra 9 ($@4) + $padrão reduzir usando a regra 11 (var) parte_declara_vars ir ao estado 18 var ir ao estado 19 - $@2 ir ao estado 20 + $@4 ir ao estado 20 Estado 16 - 4 parte_declara_rotulos: LABEL VIRGULA • + 6 parte_declara_rotulos: LABEL VIRGULA • - $padrão reduzir usando a regra 4 (parte_declara_rotulos) + $padrão reduzir usando a regra 6 (parte_declara_rotulos) Estado 17 @@ -437,1000 +452,1047 @@ Estado 17 Estado 18 - 3 bloco: parte_declara_rotulos parte_declara_vars • parte_declara_subrotinas comando_composto + 5 bloco: parte_declara_rotulos parte_declara_vars • $@2 parte_declara_subrotinas $@3 comando_composto - PROCEDURE deslocar, e ir ao estado 21 + $padrão reduzir usando a regra 3 ($@2) - $padrão reduzir usando a regra 22 (declaracao_procedimento) - - parte_declara_subrotinas ir ao estado 22 - declaracao_procedimento ir ao estado 23 + $@2 ir ao estado 21 Estado 19 - 6 parte_declara_vars: var • + 8 parte_declara_vars: var • - $padrão reduzir usando a regra 6 (parte_declara_vars) + $padrão reduzir usando a regra 8 (parte_declara_vars) Estado 20 - 8 var: $@2 • VAR declara_vars + 10 var: $@4 • VAR declara_vars - VAR deslocar, e ir ao estado 24 + VAR deslocar, e ir ao estado 22 Estado 21 - 21 declaracao_procedimento: PROCEDURE • IDENT + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 • parte_declara_subrotinas $@3 comando_composto + + $padrão reduzir usando a regra 23 (parte_declara_subrotinas) - IDENT deslocar, e ir ao estado 25 + parte_declara_subrotinas ir ao estado 23 Estado 22 - 3 bloco: parte_declara_rotulos parte_declara_vars parte_declara_subrotinas • comando_composto + 10 var: $@4 VAR • declara_vars - T_BEGIN deslocar, e ir ao estado 26 + $padrão reduzir usando a regra 14 ($@5) - comando_composto ir ao estado 27 + declara_vars ir ao estado 24 + declara_var ir ao estado 25 + $@5 ir ao estado 26 Estado 23 - 20 parte_declara_subrotinas: declaracao_procedimento • + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas • $@3 comando_composto + 22 parte_declara_subrotinas: parte_declara_subrotinas • declaracao_procedimento - $padrão reduzir usando a regra 20 (parte_declara_subrotinas) + PROCEDURE deslocar, e ir ao estado 27 + + $padrão reduzir usando a regra 4 ($@3) + + $@3 ir ao estado 28 + declaracao_procedimento ir ao estado 29 Estado 24 - 8 var: $@2 VAR • declara_vars + 10 var: $@4 VAR declara_vars • + 12 declara_vars: declara_vars • declara_var - $padrão reduzir usando a regra 12 ($@3) + IDENT reduzir usando a regra 14 ($@5) + $padrão reduzir usando a regra 10 (var) - declara_vars ir ao estado 28 - declara_var ir ao estado 29 - $@3 ir ao estado 30 + declara_var ir ao estado 30 + $@5 ir ao estado 26 Estado 25 - 21 declaracao_procedimento: PROCEDURE IDENT • + 13 declara_vars: declara_var • - $padrão reduzir usando a regra 21 (declaracao_procedimento) + $padrão reduzir usando a regra 13 (declara_vars) Estado 26 - 23 comando_composto: T_BEGIN • comandos T_END - - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - NUMERO deslocar, e ir ao estado 33 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 + 16 declara_var: $@5 • lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA - WHILE reduzir usando a regra 60 ($@6) - $padrão reduzir usando a regra 26 (comandos) + IDENT deslocar, e ir ao estado 31 - comando_composto ir ao estado 36 - comandos ir ao estado 37 - comando ir ao estado 38 - comando_sem_rotulo ir ao estado 39 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - numero ir ao estado 43 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + lista_id_var ir ao estado 32 Estado 27 - 3 bloco: parte_declara_rotulos parte_declara_vars parte_declara_subrotinas comando_composto • + 25 declaracao_procedimento: PROCEDURE • IDENT $@7 PONTO_E_VIRGULA bloco - $padrão reduzir usando a regra 3 (bloco) + IDENT deslocar, e ir ao estado 33 Estado 28 - 8 var: $@2 VAR declara_vars • - 10 declara_vars: declara_vars • declara_var + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 • comando_composto - IDENT reduzir usando a regra 12 ($@3) - $padrão reduzir usando a regra 8 (var) + T_BEGIN deslocar, e ir ao estado 34 - declara_var ir ao estado 48 - $@3 ir ao estado 30 + comando_composto ir ao estado 35 Estado 29 - 11 declara_vars: declara_var • + 22 parte_declara_subrotinas: parte_declara_subrotinas declaracao_procedimento • - $padrão reduzir usando a regra 11 (declara_vars) + $padrão reduzir usando a regra 22 (parte_declara_subrotinas) Estado 30 - 14 declara_var: $@3 • lista_id_var DOIS_PONTOS tipo $@4 PONTO_E_VIRGULA + 12 declara_vars: declara_vars declara_var • - IDENT deslocar, e ir ao estado 49 - - lista_id_var ir ao estado 50 + $padrão reduzir usando a regra 12 (declara_vars) Estado 31 - 56 atribuicao: IDENT • $@5 ATRIBUICAO expressao_simples - - $padrão reduzir usando a regra 55 ($@5) + 19 lista_id_var: IDENT • - $@5 ir ao estado 51 + $padrão reduzir usando a regra 19 (lista_id_var) Estado 32 - 67 if_then: IF • expressao $@8 THEN comando_sem_rotulo + 16 declara_var: $@5 lista_id_var • DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA + 18 lista_id_var: lista_id_var • VIRGULA IDENT - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 - - expressao ir ao estado 54 - expressao_simples ir ao estado 55 - termo ir ao estado 56 - fator ir ao estado 57 + VIRGULA deslocar, e ir ao estado 36 + DOIS_PONTOS deslocar, e ir ao estado 37 Estado 33 - 59 numero: NUMERO • + 25 declaracao_procedimento: PROCEDURE IDENT • $@7 PONTO_E_VIRGULA bloco + + $padrão reduzir usando a regra 24 ($@7) - $padrão reduzir usando a regra 59 (numero) + $@7 ir ao estado 38 Estado 34 - 35 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES + 26 comando_composto: T_BEGIN • comandos T_END - ABRE_PARENTESES deslocar, e ir ao estado 58 + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + NUMERO deslocar, e ir ao estado 41 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 + + WHILE reduzir usando a regra 63 ($@9) + $padrão reduzir usando a regra 29 (comandos) + + comando_composto ir ao estado 44 + comandos ir ao estado 45 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + numero ir ao estado 51 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 Estado 35 - 39 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto • - ABRE_PARENTESES deslocar, e ir ao estado 59 + $padrão reduzir usando a regra 5 (bloco) Estado 36 - 30 comando_sem_rotulo: comando_composto • + 18 lista_id_var: lista_id_var VIRGULA • IDENT - $padrão reduzir usando a regra 30 (comando_sem_rotulo) + IDENT deslocar, e ir ao estado 56 Estado 37 - 23 comando_composto: T_BEGIN comandos • T_END + 16 declara_var: $@5 lista_id_var DOIS_PONTOS • tipo $@6 PONTO_E_VIRGULA + + IDENT deslocar, e ir ao estado 57 - T_END deslocar, e ir ao estado 60 + tipo ir ao estado 58 Estado 38 - 24 comandos: comando • PONTO_E_VIRGULA comandos - 25 | comando • PONTO_E_VIRGULA + 25 declaracao_procedimento: PROCEDURE IDENT $@7 • PONTO_E_VIRGULA bloco - PONTO_E_VIRGULA deslocar, e ir ao estado 61 + PONTO_E_VIRGULA deslocar, e ir ao estado 59 Estado 39 - 28 comando: comando_sem_rotulo • + 59 atribuicao: IDENT • $@8 ATRIBUICAO expressao_simples - $padrão reduzir usando a regra 28 (comando) + $padrão reduzir usando a regra 58 ($@8) + + $@8 ir ao estado 60 Estado 40 - 33 comando_sem_rotulo: leitura • + 70 if_then: IF • expressao $@11 THEN comando_sem_rotulo - $padrão reduzir usando a regra 33 (comando_sem_rotulo) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + + expressao ir ao estado 63 + expressao_simples ir ao estado 64 + termo ir ao estado 65 + fator ir ao estado 66 Estado 41 - 34 comando_sem_rotulo: escrita • + 62 numero: NUMERO • - $padrão reduzir usando a regra 34 (comando_sem_rotulo) + $padrão reduzir usando a regra 62 (numero) Estado 42 - 29 comando_sem_rotulo: atribuicao • + 38 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES - $padrão reduzir usando a regra 29 (comando_sem_rotulo) + ABRE_PARENTESES deslocar, e ir ao estado 67 Estado 43 - 27 comando: numero • DOIS_PONTOS comando_sem_rotulo + 42 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES - DOIS_PONTOS deslocar, e ir ao estado 62 + ABRE_PARENTESES deslocar, e ir ao estado 68 Estado 44 - 32 comando_sem_rotulo: comando_repetitivo • + 33 comando_sem_rotulo: comando_composto • - $padrão reduzir usando a regra 32 (comando_sem_rotulo) + $padrão reduzir usando a regra 33 (comando_sem_rotulo) Estado 45 - 62 comando_repetitivo: $@6 • WHILE expressao DO $@7 comando_sem_rotulo + 26 comando_composto: T_BEGIN comandos • T_END - WHILE deslocar, e ir ao estado 63 + T_END deslocar, e ir ao estado 69 Estado 46 - 31 comando_sem_rotulo: comando_condicional • + 27 comandos: comando • PONTO_E_VIRGULA comandos + 28 | comando • PONTO_E_VIRGULA - $padrão reduzir usando a regra 31 (comando_sem_rotulo) + PONTO_E_VIRGULA deslocar, e ir ao estado 70 Estado 47 - 63 comando_condicional: if_then • cond_else - - ELSE deslocar, e ir ao estado 64 + 31 comando: comando_sem_rotulo • - $padrão reduzir usando a regra 65 (cond_else) - - cond_else ir ao estado 65 + $padrão reduzir usando a regra 31 (comando) Estado 48 - 10 declara_vars: declara_vars declara_var • + 36 comando_sem_rotulo: leitura • - $padrão reduzir usando a regra 10 (declara_vars) + $padrão reduzir usando a regra 36 (comando_sem_rotulo) Estado 49 - 17 lista_id_var: IDENT • + 37 comando_sem_rotulo: escrita • - $padrão reduzir usando a regra 17 (lista_id_var) + $padrão reduzir usando a regra 37 (comando_sem_rotulo) Estado 50 - 14 declara_var: $@3 lista_id_var • DOIS_PONTOS tipo $@4 PONTO_E_VIRGULA - 16 lista_id_var: lista_id_var • VIRGULA IDENT + 32 comando_sem_rotulo: atribuicao • - VIRGULA deslocar, e ir ao estado 66 - DOIS_PONTOS deslocar, e ir ao estado 67 + $padrão reduzir usando a regra 32 (comando_sem_rotulo) Estado 51 - 56 atribuicao: IDENT $@5 • ATRIBUICAO expressao_simples + 30 comando: numero • DOIS_PONTOS comando_sem_rotulo - ATRIBUICAO deslocar, e ir ao estado 68 + DOIS_PONTOS deslocar, e ir ao estado 71 Estado 52 - 57 fator: IDENT • + 35 comando_sem_rotulo: comando_repetitivo • - $padrão reduzir usando a regra 57 (fator) + $padrão reduzir usando a regra 35 (comando_sem_rotulo) Estado 53 - 58 fator: NUMERO • + 65 comando_repetitivo: $@9 • WHILE expressao DO $@10 comando_sem_rotulo - $padrão reduzir usando a regra 58 (fator) + WHILE deslocar, e ir ao estado 72 Estado 54 - 42 expressao: expressao • IGUAL expressao_simples - 43 | expressao • DIFERENTE expressao_simples - 44 | expressao • MENOR expressao_simples - 45 | expressao • MENOR_IGUAL expressao_simples - 46 | expressao • MAIOR expressao_simples - 47 | expressao • MAIOR_IGUAL expressao_simples - 67 if_then: IF expressao • $@8 THEN comando_sem_rotulo - - IGUAL deslocar, e ir ao estado 69 - DIFERENTE deslocar, e ir ao estado 70 - MENOR_IGUAL deslocar, e ir ao estado 71 - MAIOR_IGUAL deslocar, e ir ao estado 72 - MENOR deslocar, e ir ao estado 73 - MAIOR deslocar, e ir ao estado 74 - - $padrão reduzir usando a regra 66 ($@8) + 34 comando_sem_rotulo: comando_condicional • - $@8 ir ao estado 75 + $padrão reduzir usando a regra 34 (comando_sem_rotulo) Estado 55 - 48 expressao: expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 66 comando_condicional: if_then • cond_else - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + ELSE deslocar, e ir ao estado 73 - $padrão reduzir usando a regra 48 (expressao) + $padrão reduzir usando a regra 68 (cond_else) + cond_else ir ao estado 74 -Estado 56 - 51 expressao_simples: termo • - 52 termo: termo • ASTERISCO fator - 53 | termo • DIV fator +Estado 56 - DIV deslocar, e ir ao estado 78 - ASTERISCO deslocar, e ir ao estado 79 + 18 lista_id_var: lista_id_var VIRGULA IDENT • - $padrão reduzir usando a regra 51 (expressao_simples) + $padrão reduzir usando a regra 18 (lista_id_var) Estado 57 - 54 termo: fator • + 17 tipo: IDENT • - $padrão reduzir usando a regra 54 (termo) + $padrão reduzir usando a regra 17 (tipo) Estado 58 - 35 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo • $@6 PONTO_E_VIRGULA - IDENT deslocar, e ir ao estado 80 + $padrão reduzir usando a regra 15 ($@6) - lista_leituras ir ao estado 81 - simb_leitura ir ao estado 82 + $@6 ir ao estado 75 Estado 59 - 39 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA • bloco + + LABEL deslocar, e ir ao estado 13 - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + $padrão reduzir usando a regra 7 (parte_declara_rotulos) - lista_escritas ir ao estado 83 - expressao_simples ir ao estado 84 - termo ir ao estado 56 - fator ir ao estado 57 + bloco ir ao estado 76 + parte_declara_rotulos ir ao estado 15 Estado 60 - 23 comando_composto: T_BEGIN comandos T_END • + 59 atribuicao: IDENT $@8 • ATRIBUICAO expressao_simples - $padrão reduzir usando a regra 23 (comando_composto) + ATRIBUICAO deslocar, e ir ao estado 77 Estado 61 - 24 comandos: comando PONTO_E_VIRGULA • comandos - 25 | comando PONTO_E_VIRGULA • - - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - NUMERO deslocar, e ir ao estado 33 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 - - T_END reduzir usando a regra 25 (comandos) - T_END [reduzir usando a regra 26 (comandos)] - WHILE reduzir usando a regra 60 ($@6) - $padrão reduzir usando a regra 25 (comandos) - - comando_composto ir ao estado 36 - comandos ir ao estado 85 - comando ir ao estado 38 - comando_sem_rotulo ir ao estado 39 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - numero ir ao estado 43 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + 60 fator: IDENT • + $padrão reduzir usando a regra 60 (fator) -Estado 62 - - 27 comando: numero DOIS_PONTOS • comando_sem_rotulo - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 +Estado 62 - $padrão reduzir usando a regra 60 ($@6) + 61 fator: NUMERO • - comando_composto ir ao estado 36 - comando_sem_rotulo ir ao estado 86 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + $padrão reduzir usando a regra 61 (fator) Estado 63 - 62 comando_repetitivo: $@6 WHILE • expressao DO $@7 comando_sem_rotulo + 45 expressao: expressao • IGUAL expressao_simples + 46 | expressao • DIFERENTE expressao_simples + 47 | expressao • MENOR expressao_simples + 48 | expressao • MENOR_IGUAL expressao_simples + 49 | expressao • MAIOR expressao_simples + 50 | expressao • MAIOR_IGUAL expressao_simples + 70 if_then: IF expressao • $@11 THEN comando_sem_rotulo - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IGUAL deslocar, e ir ao estado 78 + DIFERENTE deslocar, e ir ao estado 79 + MENOR_IGUAL deslocar, e ir ao estado 80 + MAIOR_IGUAL deslocar, e ir ao estado 81 + MENOR deslocar, e ir ao estado 82 + MAIOR deslocar, e ir ao estado 83 - expressao ir ao estado 87 - expressao_simples ir ao estado 55 - termo ir ao estado 56 - fator ir ao estado 57 + $padrão reduzir usando a regra 69 ($@11) + $@11 ir ao estado 84 -Estado 64 - 64 cond_else: ELSE • comando_sem_rotulo +Estado 64 - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 + 51 expressao: expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 60 ($@6) + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - comando_composto ir ao estado 36 - comando_sem_rotulo ir ao estado 88 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + $padrão reduzir usando a regra 51 (expressao) Estado 65 - 63 comando_condicional: if_then cond_else • + 54 expressao_simples: termo • + 55 termo: termo • ASTERISCO fator + 56 | termo • DIV fator - $padrão reduzir usando a regra 63 (comando_condicional) + DIV deslocar, e ir ao estado 87 + ASTERISCO deslocar, e ir ao estado 88 + + $padrão reduzir usando a regra 54 (expressao_simples) Estado 66 - 16 lista_id_var: lista_id_var VIRGULA • IDENT + 57 termo: fator • - IDENT deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 57 (termo) Estado 67 - 14 declara_var: $@3 lista_id_var DOIS_PONTOS • tipo $@4 PONTO_E_VIRGULA + 38 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES - IDENT deslocar, e ir ao estado 90 + IDENT deslocar, e ir ao estado 89 - tipo ir ao estado 91 + lista_leituras ir ao estado 90 + simb_leitura ir ao estado 91 Estado 68 - 56 atribuicao: IDENT $@5 ATRIBUICAO • expressao_simples + 42 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - expressao_simples ir ao estado 92 - termo ir ao estado 56 - fator ir ao estado 57 + lista_escritas ir ao estado 92 + expressao_simples ir ao estado 93 + termo ir ao estado 65 + fator ir ao estado 66 Estado 69 - 42 expressao: expressao IGUAL • expressao_simples - - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + 26 comando_composto: T_BEGIN comandos T_END • - expressao_simples ir ao estado 93 - termo ir ao estado 56 - fator ir ao estado 57 + $padrão reduzir usando a regra 26 (comando_composto) Estado 70 - 43 expressao: expressao DIFERENTE • expressao_simples - - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 - - expressao_simples ir ao estado 94 - termo ir ao estado 56 - fator ir ao estado 57 + 27 comandos: comando PONTO_E_VIRGULA • comandos + 28 | comando PONTO_E_VIRGULA • + + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + NUMERO deslocar, e ir ao estado 41 + 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 63 ($@9) + $padrão reduzir usando a regra 28 (comandos) + + comando_composto ir ao estado 44 + comandos ir ao estado 94 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + numero ir ao estado 51 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 Estado 71 - 45 expressao: expressao MENOR_IGUAL • expressao_simples + 30 comando: numero DOIS_PONTOS • comando_sem_rotulo + + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + $padrão reduzir usando a regra 63 ($@9) - expressao_simples ir ao estado 95 - termo ir ao estado 56 - fator ir ao estado 57 + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 95 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 Estado 72 - 47 expressao: expressao MAIOR_IGUAL • expressao_simples + 65 comando_repetitivo: $@9 WHILE • expressao DO $@10 comando_sem_rotulo - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - expressao_simples ir ao estado 96 - termo ir ao estado 56 - fator ir ao estado 57 + expressao ir ao estado 96 + expressao_simples ir ao estado 64 + termo ir ao estado 65 + fator ir ao estado 66 Estado 73 - 44 expressao: expressao MENOR • expressao_simples + 67 cond_else: ELSE • comando_sem_rotulo - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 - expressao_simples ir ao estado 97 - termo ir ao estado 56 - fator ir ao estado 57 + $padrão reduzir usando a regra 63 ($@9) + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 97 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 -Estado 74 - 46 expressao: expressao MAIOR • expressao_simples +Estado 74 - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + 66 comando_condicional: if_then cond_else • - expressao_simples ir ao estado 98 - termo ir ao estado 56 - fator ir ao estado 57 + $padrão reduzir usando a regra 66 (comando_condicional) Estado 75 - 67 if_then: IF expressao $@8 • THEN comando_sem_rotulo + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA - THEN deslocar, e ir ao estado 99 + PONTO_E_VIRGULA deslocar, e ir ao estado 98 Estado 76 - 49 expressao_simples: expressao_simples MAIS • termo - - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco • - termo ir ao estado 100 - fator ir ao estado 57 + $padrão reduzir usando a regra 25 (declaracao_procedimento) Estado 77 - 50 expressao_simples: expressao_simples MENOS • termo + 59 atribuicao: IDENT $@8 ATRIBUICAO • expressao_simples - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - termo ir ao estado 101 - fator ir ao estado 57 + expressao_simples ir ao estado 99 + termo ir ao estado 65 + fator ir ao estado 66 Estado 78 - 53 termo: termo DIV • fator + 45 expressao: expressao IGUAL • expressao_simples - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - fator ir ao estado 102 + expressao_simples ir ao estado 100 + termo ir ao estado 65 + fator ir ao estado 66 Estado 79 - 52 termo: termo ASTERISCO • fator + 46 expressao: expressao DIFERENTE • expressao_simples - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - fator ir ao estado 103 + expressao_simples ir ao estado 101 + termo ir ao estado 65 + fator ir ao estado 66 Estado 80 - 38 simb_leitura: IDENT • + 48 expressao: expressao MENOR_IGUAL • expressao_simples - $padrão reduzir usando a regra 38 (simb_leitura) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + + expressao_simples ir ao estado 102 + termo ir ao estado 65 + fator ir ao estado 66 Estado 81 - 35 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES - 36 lista_leituras: lista_leituras • VIRGULA simb_leitura + 50 expressao: expressao MAIOR_IGUAL • expressao_simples + + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - FECHA_PARENTESES deslocar, e ir ao estado 104 - VIRGULA deslocar, e ir ao estado 105 + expressao_simples ir ao estado 103 + termo ir ao estado 65 + fator ir ao estado 66 Estado 82 - 37 lista_leituras: simb_leitura • + 47 expressao: expressao MENOR • expressao_simples - $padrão reduzir usando a regra 37 (lista_leituras) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + + expressao_simples ir ao estado 104 + termo ir ao estado 65 + fator ir ao estado 66 Estado 83 - 39 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES - 40 lista_escritas: lista_escritas • VIRGULA expressao_simples + 49 expressao: expressao MAIOR • expressao_simples - FECHA_PARENTESES deslocar, e ir ao estado 106 - VIRGULA deslocar, e ir ao estado 107 + 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 -Estado 84 - 41 lista_escritas: expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo +Estado 84 - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + 70 if_then: IF expressao $@11 • THEN comando_sem_rotulo - $padrão reduzir usando a regra 41 (lista_escritas) + THEN deslocar, e ir ao estado 106 Estado 85 - 24 comandos: comando PONTO_E_VIRGULA comandos • + 52 expressao_simples: expressao_simples MAIS • termo + + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - $padrão reduzir usando a regra 24 (comandos) + termo ir ao estado 107 + fator ir ao estado 66 Estado 86 - 27 comando: numero DOIS_PONTOS comando_sem_rotulo • + 53 expressao_simples: expressao_simples MENOS • termo - $padrão reduzir usando a regra 27 (comando) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + + termo ir ao estado 108 + fator ir ao estado 66 Estado 87 - 42 expressao: expressao • IGUAL expressao_simples - 43 | expressao • DIFERENTE expressao_simples - 44 | expressao • MENOR expressao_simples - 45 | expressao • MENOR_IGUAL expressao_simples - 46 | expressao • MAIOR expressao_simples - 47 | expressao • MAIOR_IGUAL expressao_simples - 62 comando_repetitivo: $@6 WHILE expressao • DO $@7 comando_sem_rotulo + 56 termo: termo DIV • fator + + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - DO deslocar, e ir ao estado 108 - IGUAL deslocar, e ir ao estado 69 - DIFERENTE deslocar, e ir ao estado 70 - MENOR_IGUAL deslocar, e ir ao estado 71 - MAIOR_IGUAL deslocar, e ir ao estado 72 - MENOR deslocar, e ir ao estado 73 - MAIOR deslocar, e ir ao estado 74 + fator ir ao estado 109 Estado 88 - 64 cond_else: ELSE comando_sem_rotulo • + 55 termo: termo ASTERISCO • fator - $padrão reduzir usando a regra 64 (cond_else) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + + fator ir ao estado 110 Estado 89 - 16 lista_id_var: lista_id_var VIRGULA IDENT • + 41 simb_leitura: IDENT • - $padrão reduzir usando a regra 16 (lista_id_var) + $padrão reduzir usando a regra 41 (simb_leitura) Estado 90 - 15 tipo: IDENT • + 38 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES + 39 lista_leituras: lista_leituras • VIRGULA simb_leitura - $padrão reduzir usando a regra 15 (tipo) + FECHA_PARENTESES deslocar, e ir ao estado 111 + VIRGULA deslocar, e ir ao estado 112 Estado 91 - 14 declara_var: $@3 lista_id_var DOIS_PONTOS tipo • $@4 PONTO_E_VIRGULA - - $padrão reduzir usando a regra 13 ($@4) + 40 lista_leituras: simb_leitura • - $@4 ir ao estado 109 + $padrão reduzir usando a regra 40 (lista_leituras) Estado 92 - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo - 56 atribuicao: IDENT $@5 ATRIBUICAO expressao_simples • + 42 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES + 43 lista_escritas: lista_escritas • VIRGULA expressao_simples - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 - - $padrão reduzir usando a regra 56 (atribuicao) + FECHA_PARENTESES deslocar, e ir ao estado 113 + VIRGULA deslocar, e ir ao estado 114 Estado 93 - 42 expressao: expressao IGUAL expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 44 lista_escritas: expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - $padrão reduzir usando a regra 42 (expressao) + $padrão reduzir usando a regra 44 (lista_escritas) Estado 94 - 43 expressao: expressao DIFERENTE expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + 27 comandos: comando PONTO_E_VIRGULA comandos • - $padrão reduzir usando a regra 43 (expressao) + $padrão reduzir usando a regra 27 (comandos) Estado 95 - 45 expressao: expressao MENOR_IGUAL expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 30 comando: numero DOIS_PONTOS comando_sem_rotulo • - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 - - $padrão reduzir usando a regra 45 (expressao) + $padrão reduzir usando a regra 30 (comando) Estado 96 - 47 expressao: expressao MAIOR_IGUAL expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 45 expressao: expressao • IGUAL expressao_simples + 46 | expressao • DIFERENTE expressao_simples + 47 | expressao • MENOR expressao_simples + 48 | expressao • MENOR_IGUAL expressao_simples + 49 | expressao • MAIOR expressao_simples + 50 | expressao • MAIOR_IGUAL expressao_simples + 65 comando_repetitivo: $@9 WHILE expressao • DO $@10 comando_sem_rotulo - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 - - $padrão reduzir usando a regra 47 (expressao) + DO deslocar, e ir ao estado 115 + IGUAL deslocar, e ir ao estado 78 + DIFERENTE deslocar, e ir ao estado 79 + MENOR_IGUAL deslocar, e ir ao estado 80 + MAIOR_IGUAL deslocar, e ir ao estado 81 + MENOR deslocar, e ir ao estado 82 + MAIOR deslocar, e ir ao estado 83 Estado 97 - 44 expressao: expressao MENOR expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo - - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + 67 cond_else: ELSE comando_sem_rotulo • - $padrão reduzir usando a regra 44 (expressao) + $padrão reduzir usando a regra 67 (cond_else) Estado 98 - 46 expressao: expressao MAIOR expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 - - $padrão reduzir usando a regra 46 (expressao) + $padrão reduzir usando a regra 16 (declara_var) Estado 99 - 67 if_then: IF expressao $@8 THEN • comando_sem_rotulo + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo + 59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples • - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - $padrão reduzir usando a regra 60 ($@6) - - comando_composto ir ao estado 36 - comando_sem_rotulo ir ao estado 110 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + $padrão reduzir usando a regra 59 (atribuicao) Estado 100 - 49 expressao_simples: expressao_simples MAIS termo • - 52 termo: termo • ASTERISCO fator - 53 | termo • DIV fator + 45 expressao: expressao IGUAL expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - DIV deslocar, e ir ao estado 78 - ASTERISCO deslocar, e ir ao estado 79 + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - $padrão reduzir usando a regra 49 (expressao_simples) + $padrão reduzir usando a regra 45 (expressao) Estado 101 - 50 expressao_simples: expressao_simples MENOS termo • - 52 termo: termo • ASTERISCO fator - 53 | termo • DIV fator + 46 expressao: expressao DIFERENTE expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - DIV deslocar, e ir ao estado 78 - ASTERISCO deslocar, e ir ao estado 79 + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - $padrão reduzir usando a regra 50 (expressao_simples) + $padrão reduzir usando a regra 46 (expressao) Estado 102 - 53 termo: termo DIV fator • + 48 expressao: expressao MENOR_IGUAL expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 53 (termo) + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 + + $padrão reduzir usando a regra 48 (expressao) Estado 103 - 52 termo: termo ASTERISCO fator • + 50 expressao: expressao MAIOR_IGUAL expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 52 (termo) + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 + + $padrão reduzir usando a regra 50 (expressao) Estado 104 - 35 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • + 47 expressao: expressao MENOR expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - $padrão reduzir usando a regra 35 (leitura) + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 + + $padrão reduzir usando a regra 47 (expressao) Estado 105 - 36 lista_leituras: lista_leituras VIRGULA • simb_leitura + 49 expressao: expressao MAIOR expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo - IDENT deslocar, e ir ao estado 80 + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 - simb_leitura ir ao estado 111 + $padrão reduzir usando a regra 49 (expressao) Estado 106 - 39 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • + 70 if_then: IF expressao $@11 THEN • comando_sem_rotulo + + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 + + $padrão reduzir usando a regra 63 ($@9) - $padrão reduzir usando a regra 39 (escrita) + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 116 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 Estado 107 - 40 lista_escritas: lista_escritas VIRGULA • expressao_simples + 52 expressao_simples: expressao_simples MAIS termo • + 55 termo: termo • ASTERISCO fator + 56 | termo • DIV fator - IDENT deslocar, e ir ao estado 52 - NUMERO deslocar, e ir ao estado 53 + DIV deslocar, e ir ao estado 87 + ASTERISCO deslocar, e ir ao estado 88 - expressao_simples ir ao estado 112 - termo ir ao estado 56 - fator ir ao estado 57 + $padrão reduzir usando a regra 52 (expressao_simples) Estado 108 - 62 comando_repetitivo: $@6 WHILE expressao DO • $@7 comando_sem_rotulo + 53 expressao_simples: expressao_simples MENOS termo • + 55 termo: termo • ASTERISCO fator + 56 | termo • DIV fator - $padrão reduzir usando a regra 61 ($@7) + DIV deslocar, e ir ao estado 87 + ASTERISCO deslocar, e ir ao estado 88 - $@7 ir ao estado 113 + $padrão reduzir usando a regra 53 (expressao_simples) Estado 109 - 14 declara_var: $@3 lista_id_var DOIS_PONTOS tipo $@4 • PONTO_E_VIRGULA + 56 termo: termo DIV fator • - PONTO_E_VIRGULA deslocar, e ir ao estado 114 + $padrão reduzir usando a regra 56 (termo) Estado 110 - 67 if_then: IF expressao $@8 THEN comando_sem_rotulo • + 55 termo: termo ASTERISCO fator • - $padrão reduzir usando a regra 67 (if_then) + $padrão reduzir usando a regra 55 (termo) Estado 111 - 36 lista_leituras: lista_leituras VIRGULA simb_leitura • + 38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • - $padrão reduzir usando a regra 36 (lista_leituras) + $padrão reduzir usando a regra 38 (leitura) Estado 112 - 40 lista_escritas: lista_escritas VIRGULA expressao_simples • - 49 expressao_simples: expressao_simples • MAIS termo - 50 | expressao_simples • MENOS termo + 39 lista_leituras: lista_leituras VIRGULA • simb_leitura - MAIS deslocar, e ir ao estado 76 - MENOS deslocar, e ir ao estado 77 + IDENT deslocar, e ir ao estado 89 - $padrão reduzir usando a regra 40 (lista_escritas) + simb_leitura ir ao estado 117 Estado 113 - 62 comando_repetitivo: $@6 WHILE expressao DO $@7 • comando_sem_rotulo - - T_BEGIN deslocar, e ir ao estado 26 - IDENT deslocar, e ir ao estado 31 - IF deslocar, e ir ao estado 32 - READ deslocar, e ir ao estado 34 - WRITE deslocar, e ir ao estado 35 + 42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • - $padrão reduzir usando a regra 60 ($@6) - - comando_composto ir ao estado 36 - comando_sem_rotulo ir ao estado 115 - leitura ir ao estado 40 - escrita ir ao estado 41 - atribuicao ir ao estado 42 - comando_repetitivo ir ao estado 44 - $@6 ir ao estado 45 - comando_condicional ir ao estado 46 - if_then ir ao estado 47 + $padrão reduzir usando a regra 42 (escrita) Estado 114 - 14 declara_var: $@3 lista_id_var DOIS_PONTOS tipo $@4 PONTO_E_VIRGULA • + 43 lista_escritas: lista_escritas VIRGULA • expressao_simples + + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - $padrão reduzir usando a regra 14 (declara_var) + expressao_simples ir ao estado 118 + termo ir ao estado 65 + fator ir ao estado 66 Estado 115 - 62 comando_repetitivo: $@6 WHILE expressao DO $@7 comando_sem_rotulo • + 65 comando_repetitivo: $@9 WHILE expressao DO • $@10 comando_sem_rotulo + + $padrão reduzir usando a regra 64 ($@10) + + $@10 ir ao estado 119 + + +Estado 116 + + 70 if_then: IF expressao $@11 THEN comando_sem_rotulo • + + $padrão reduzir usando a regra 70 (if_then) + + +Estado 117 + + 39 lista_leituras: lista_leituras VIRGULA simb_leitura • + + $padrão reduzir usando a regra 39 (lista_leituras) + + +Estado 118 + + 43 lista_escritas: lista_escritas VIRGULA expressao_simples • + 52 expressao_simples: expressao_simples • MAIS termo + 53 | expressao_simples • MENOS termo + + MAIS deslocar, e ir ao estado 85 + MENOS deslocar, e ir ao estado 86 + + $padrão reduzir usando a regra 43 (lista_escritas) + + +Estado 119 + + 65 comando_repetitivo: $@9 WHILE expressao DO $@10 • comando_sem_rotulo + + T_BEGIN deslocar, e ir ao estado 34 + IDENT deslocar, e ir ao estado 39 + IF deslocar, e ir ao estado 40 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 + + $padrão reduzir usando a regra 63 ($@9) + + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 120 + leitura ir ao estado 48 + escrita ir ao estado 49 + atribuicao ir ao estado 50 + comando_repetitivo ir ao estado 52 + $@9 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 + + +Estado 120 + + 65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo • - $padrão reduzir usando a regra 62 (comando_repetitivo) + $padrão reduzir usando a regra 65 (comando_repetitivo) diff --git a/compilador.tab.c b/compilador.tab.c index 7aa196f..4ab7d2e 100644 --- a/compilador.tab.c +++ b/compilador.tab.c @@ -163,42 +163,45 @@ enum yysymbol_kind_t YYSYMBOL_programa = 44, /* programa */ YYSYMBOL_45_1 = 45, /* $@1 */ YYSYMBOL_bloco = 46, /* bloco */ - YYSYMBOL_parte_declara_rotulos = 47, /* parte_declara_rotulos */ - YYSYMBOL_parte_declara_vars = 48, /* parte_declara_vars */ - YYSYMBOL_var = 49, /* var */ - YYSYMBOL_50_2 = 50, /* $@2 */ - YYSYMBOL_declara_vars = 51, /* declara_vars */ - YYSYMBOL_declara_var = 52, /* declara_var */ - YYSYMBOL_53_3 = 53, /* $@3 */ - YYSYMBOL_54_4 = 54, /* $@4 */ - YYSYMBOL_tipo = 55, /* tipo */ - YYSYMBOL_lista_id_var = 56, /* lista_id_var */ - YYSYMBOL_lista_idents = 57, /* lista_idents */ - YYSYMBOL_parte_declara_subrotinas = 58, /* parte_declara_subrotinas */ - YYSYMBOL_declaracao_procedimento = 59, /* declaracao_procedimento */ - YYSYMBOL_comando_composto = 60, /* comando_composto */ - YYSYMBOL_comandos = 61, /* comandos */ - YYSYMBOL_comando = 62, /* comando */ - YYSYMBOL_comando_sem_rotulo = 63, /* comando_sem_rotulo */ - YYSYMBOL_leitura = 64, /* leitura */ - YYSYMBOL_lista_leituras = 65, /* lista_leituras */ - YYSYMBOL_simb_leitura = 66, /* simb_leitura */ - YYSYMBOL_escrita = 67, /* escrita */ - YYSYMBOL_lista_escritas = 68, /* lista_escritas */ - YYSYMBOL_expressao = 69, /* expressao */ - YYSYMBOL_expressao_simples = 70, /* expressao_simples */ - YYSYMBOL_termo = 71, /* termo */ - YYSYMBOL_atribuicao = 72, /* atribuicao */ - YYSYMBOL_73_5 = 73, /* $@5 */ - YYSYMBOL_fator = 74, /* fator */ - YYSYMBOL_numero = 75, /* numero */ - YYSYMBOL_comando_repetitivo = 76, /* comando_repetitivo */ - YYSYMBOL_77_6 = 77, /* $@6 */ - YYSYMBOL_78_7 = 78, /* $@7 */ - YYSYMBOL_comando_condicional = 79, /* comando_condicional */ - YYSYMBOL_cond_else = 80, /* cond_else */ - YYSYMBOL_if_then = 81, /* if_then */ - YYSYMBOL_82_8 = 82 /* $@8 */ + YYSYMBOL_47_2 = 47, /* $@2 */ + YYSYMBOL_48_3 = 48, /* $@3 */ + YYSYMBOL_parte_declara_rotulos = 49, /* parte_declara_rotulos */ + YYSYMBOL_parte_declara_vars = 50, /* parte_declara_vars */ + YYSYMBOL_var = 51, /* var */ + YYSYMBOL_52_4 = 52, /* $@4 */ + YYSYMBOL_declara_vars = 53, /* declara_vars */ + YYSYMBOL_declara_var = 54, /* declara_var */ + YYSYMBOL_55_5 = 55, /* $@5 */ + YYSYMBOL_56_6 = 56, /* $@6 */ + YYSYMBOL_tipo = 57, /* tipo */ + YYSYMBOL_lista_id_var = 58, /* lista_id_var */ + YYSYMBOL_lista_idents = 59, /* lista_idents */ + YYSYMBOL_parte_declara_subrotinas = 60, /* parte_declara_subrotinas */ + YYSYMBOL_declaracao_procedimento = 61, /* declaracao_procedimento */ + YYSYMBOL_62_7 = 62, /* $@7 */ + YYSYMBOL_comando_composto = 63, /* comando_composto */ + YYSYMBOL_comandos = 64, /* comandos */ + YYSYMBOL_comando = 65, /* comando */ + YYSYMBOL_comando_sem_rotulo = 66, /* comando_sem_rotulo */ + YYSYMBOL_leitura = 67, /* leitura */ + YYSYMBOL_lista_leituras = 68, /* lista_leituras */ + YYSYMBOL_simb_leitura = 69, /* simb_leitura */ + YYSYMBOL_escrita = 70, /* escrita */ + YYSYMBOL_lista_escritas = 71, /* lista_escritas */ + YYSYMBOL_expressao = 72, /* expressao */ + YYSYMBOL_expressao_simples = 73, /* expressao_simples */ + YYSYMBOL_termo = 74, /* termo */ + YYSYMBOL_atribuicao = 75, /* atribuicao */ + YYSYMBOL_76_8 = 76, /* $@8 */ + YYSYMBOL_fator = 77, /* fator */ + YYSYMBOL_numero = 78, /* numero */ + YYSYMBOL_comando_repetitivo = 79, /* comando_repetitivo */ + YYSYMBOL_80_9 = 80, /* $@9 */ + YYSYMBOL_81_10 = 81, /* $@10 */ + YYSYMBOL_comando_condicional = 82, /* comando_condicional */ + YYSYMBOL_cond_else = 83, /* cond_else */ + YYSYMBOL_if_then = 84, /* if_then */ + YYSYMBOL_85_11 = 85 /* $@11 */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -526,16 +529,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 97 +#define YYLAST 105 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 43 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 40 +#define YYNNTS 43 /* YYNRULES -- Number of rules. */ -#define YYNRULES 68 +#define YYNRULES 71 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 116 +#define YYNSTATES 121 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 297 @@ -588,13 +591,14 @@ static const yytype_int8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 42, 42, 42, 55, 69, 70, 73, 77, 77, - 78, 81, 82, 85, 88, 85, 96, 109, 118, 129, - 130, 134, 138, 139, 143, 146, 147, 148, 151, 152, - 155, 156, 157, 158, 159, 160, 166, 169, 170, 173, - 182, 185, 188, 193, 196, 199, 202, 205, 208, 211, - 214, 217, 220, 223, 226, 229, 232, 232, 249, 260, - 267, 269, 276, 269, 302, 309, 311, 314, 314 + 0, 42, 42, 42, 58, 69, 55, 85, 86, 89, + 93, 93, 94, 97, 98, 101, 104, 101, 112, 125, + 134, 145, 146, 150, 152, 156, 156, 178, 181, 182, + 183, 186, 187, 190, 191, 192, 193, 194, 195, 201, + 204, 205, 208, 217, 220, 223, 228, 231, 234, 237, + 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, + 267, 284, 295, 302, 304, 311, 304, 337, 344, 346, + 349, 349 }; #endif @@ -617,15 +621,15 @@ static const char *const yytname[] = "ELSE", "WHILE", "DO", "OR", "DIV", "AND", "NOT", "IGUAL", "DIFERENTE", "MENOR_IGUAL", "MAIOR_IGUAL", "MENOR", "MAIOR", "MAIS", "MENOS", "ASTERISCO", "NUMERO", "READ", "WRITE", "LOWER_THAN_ELSE", "$accept", - "programa", "$@1", "bloco", "parte_declara_rotulos", - "parte_declara_vars", "var", "$@2", "declara_vars", "declara_var", "$@3", - "$@4", "tipo", "lista_id_var", "lista_idents", - "parte_declara_subrotinas", "declaracao_procedimento", + "programa", "$@1", "bloco", "$@2", "$@3", "parte_declara_rotulos", + "parte_declara_vars", "var", "$@4", "declara_vars", "declara_var", "$@5", + "$@6", "tipo", "lista_id_var", "lista_idents", + "parte_declara_subrotinas", "declaracao_procedimento", "$@7", "comando_composto", "comandos", "comando", "comando_sem_rotulo", "leitura", "lista_leituras", "simb_leitura", "escrita", "lista_escritas", - "expressao", "expressao_simples", "termo", "atribuicao", "$@5", "fator", - "numero", "comando_repetitivo", "$@6", "$@7", "comando_condicional", - "cond_else", "if_then", "$@8", YY_NULLPTR + "expressao", "expressao_simples", "termo", "atribuicao", "$@8", "fator", + "numero", "comando_repetitivo", "$@9", "$@10", "comando_condicional", + "cond_else", "if_then", "$@11", YY_NULLPTR }; static const char * @@ -635,12 +639,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-63) +#define YYPACT_NINF (-72) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-62) +#define YYTABLE_NINF (-65) #define yytable_value_is_error(Yyn) \ 0 @@ -649,18 +653,19 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int8 yypact[] = { - -63, 5, 16, -63, 8, 26, 19, -63, 3, 31, - 32, 35, -63, 56, 57, 53, -63, -63, 49, -63, - 58, 55, 59, -63, -63, -63, 7, -63, 60, -63, - 61, -63, -10, -63, 67, 68, -63, 64, 69, -63, - -63, -63, -63, 70, -63, 62, -63, 54, -63, -63, - -2, 65, -63, -63, 24, -13, -20, -63, 71, -10, - -63, 7, 12, -10, 12, -63, 72, 74, -10, -10, - -10, -10, -10, -10, -10, 66, -10, -10, -10, -10, - -63, 21, -63, 30, -13, -63, -63, 9, -63, -63, - -63, -63, -13, -13, -13, -13, -13, -13, -13, 12, - -20, -20, -63, -63, -63, 71, -63, -10, -63, 73, - -63, -63, -13, 12, -63, -63 + -72, 28, 5, -72, 9, 26, 19, -72, -1, 53, + 33, 48, -72, 58, 56, 54, -72, -72, -72, -72, + 55, -72, -72, 50, 57, -72, 59, 60, 61, -72, + -72, -72, 13, -72, 10, -72, 62, 63, 67, -72, + -10, -72, 65, 73, -72, 68, 71, -72, -72, -72, + -72, 72, -72, 64, -72, 66, -72, -72, -72, 48, + 69, -72, -72, 22, -12, -20, -72, 74, -10, -72, + 10, -4, -10, -4, -72, 75, -72, -10, -10, -10, + -10, -10, -10, -10, 70, -10, -10, -10, -10, -72, + 21, -72, 39, -12, -72, -72, 8, -72, -72, -12, + -12, -12, -12, -12, -12, -12, -4, -20, -20, -72, + -72, -72, 74, -72, -10, -72, -72, -72, -12, -4, + -72 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -668,36 +673,39 @@ static const yytype_int8 yypact[] = means the default is an error. */ static const yytype_int8 yydefact[] = { - 2, 0, 0, 1, 0, 0, 0, 20, 0, 0, - 0, 6, 19, 0, 0, 10, 5, 3, 23, 7, - 0, 0, 0, 21, 13, 22, 27, 4, 9, 12, - 0, 56, 0, 60, 0, 0, 31, 0, 0, 29, - 34, 35, 30, 0, 33, 0, 32, 66, 11, 18, - 0, 0, 58, 59, 67, 49, 52, 55, 0, 0, - 24, 26, 61, 0, 61, 64, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 39, 0, 38, 0, 42, 25, 28, 0, 65, 17, - 16, 14, 57, 43, 44, 46, 48, 45, 47, 61, - 50, 51, 54, 53, 36, 0, 40, 0, 62, 0, - 68, 37, 41, 61, 15, 63 + 2, 0, 0, 1, 0, 0, 0, 22, 0, 0, + 0, 8, 21, 0, 0, 12, 7, 3, 4, 9, + 0, 24, 15, 5, 11, 14, 0, 0, 0, 23, + 13, 20, 0, 25, 30, 6, 0, 0, 0, 59, + 0, 63, 0, 0, 34, 0, 0, 32, 37, 38, + 33, 0, 36, 0, 35, 69, 19, 18, 16, 8, + 0, 61, 62, 70, 52, 55, 58, 0, 0, 27, + 29, 64, 0, 64, 67, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, + 0, 41, 0, 45, 28, 31, 0, 68, 17, 60, + 46, 47, 49, 51, 48, 50, 64, 53, 54, 57, + 56, 39, 0, 43, 0, 65, 71, 40, 44, 64, + 66 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -63, -63, -63, -63, -63, -63, -63, -63, -63, 63, - -63, -63, -63, -63, -63, -63, -63, 75, 20, -63, - -62, -63, -63, -23, -63, -63, 27, -58, -16, -63, - -63, -15, -63, -63, -63, -63, -63, -63, -63, -63 + -72, -72, -72, 25, -72, -72, -72, -72, -72, -72, + -72, 76, -72, -72, -72, -72, -72, -72, -72, -72, + 77, 11, -72, -71, -72, -72, -22, -72, -72, 14, + -67, -27, -72, -72, -26, -72, -72, -72, -72, -72, + -72, -72, -72 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - 0, 1, 2, 14, 15, 18, 19, 20, 28, 29, - 30, 109, 91, 50, 8, 22, 23, 36, 37, 38, - 39, 40, 81, 82, 41, 83, 54, 55, 56, 42, - 51, 57, 43, 44, 45, 113, 46, 65, 47, 75 + 0, 1, 2, 14, 21, 28, 15, 18, 19, 20, + 24, 25, 26, 75, 58, 32, 8, 23, 29, 38, + 44, 45, 46, 47, 48, 90, 91, 49, 92, 63, + 64, 65, 50, 60, 66, 51, 52, 53, 119, 54, + 74, 55, 84 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -705,72 +713,77 @@ static const yytype_int8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { - 86, 84, 88, 52, 66, 3, 67, 78, 9, 10, - 92, 93, 94, 95, 96, 97, 98, 26, 79, 4, - 31, 5, 26, 76, 77, 31, 104, 105, 32, 53, - 6, -61, 7, 32, 108, 106, 107, 110, 11, 69, - 70, 71, 72, 73, 74, 12, 33, 34, 35, 112, - 13, 115, 34, 35, 69, 70, 71, 72, 73, 74, - 100, 101, 16, 102, 103, -8, 17, 21, 25, 26, - 24, 58, 59, -13, 49, 60, 61, 64, 62, 68, - 114, 85, 111, 0, 80, 89, 63, 90, 99, 0, - 87, 48, 0, 0, 0, 0, 0, 27 + 95, 93, 97, 61, 9, 10, 34, 87, 4, 39, + 99, 100, 101, 102, 103, 104, 105, 40, 88, 36, + 34, 37, 5, 39, 85, 86, 111, 112, 3, 62, + 6, 40, 7, 115, -64, 116, 42, 43, 78, 79, + 80, 81, 82, 83, 113, 114, 12, 118, 120, 41, + 42, 43, 78, 79, 80, 81, 82, 83, 107, 108, + 11, 109, 110, 13, 16, 17, -10, 22, 27, 67, + -15, 34, 31, 33, 59, 56, 57, 68, 70, 69, + 71, 94, 98, 77, 76, 0, 96, 89, 72, 73, + 117, 0, 106, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 0, 0, 0, 35 }; static const yytype_int8 yycheck[] = { - 62, 59, 64, 13, 6, 0, 8, 27, 5, 6, - 68, 69, 70, 71, 72, 73, 74, 10, 38, 3, - 13, 13, 10, 36, 37, 13, 5, 6, 21, 39, - 4, 24, 13, 21, 25, 5, 6, 99, 7, 30, - 31, 32, 33, 34, 35, 13, 39, 40, 41, 107, - 15, 113, 40, 41, 30, 31, 32, 33, 34, 35, - 76, 77, 6, 78, 79, 12, 9, 18, 13, 10, - 12, 4, 4, 13, 13, 11, 7, 23, 8, 14, - 7, 61, 105, -1, 13, 13, 24, 13, 22, -1, - 63, 28, -1, -1, -1, -1, -1, 22 + 71, 68, 73, 13, 5, 6, 10, 27, 3, 13, + 77, 78, 79, 80, 81, 82, 83, 21, 38, 6, + 10, 8, 13, 13, 36, 37, 5, 6, 0, 39, + 4, 21, 13, 25, 24, 106, 40, 41, 30, 31, + 32, 33, 34, 35, 5, 6, 13, 114, 119, 39, + 40, 41, 30, 31, 32, 33, 34, 35, 85, 86, + 7, 87, 88, 15, 6, 9, 12, 12, 18, 4, + 13, 10, 13, 13, 7, 13, 13, 4, 7, 11, + 8, 70, 7, 14, 59, -1, 72, 13, 24, 23, + 112, -1, 22, -1, -1, -1, -1, -1, -1, -1, + 24, -1, -1, -1, -1, 28 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of state STATE-NUM. */ static const yytype_int8 yystos[] = { - 0, 44, 45, 0, 3, 13, 4, 13, 57, 5, - 6, 7, 13, 15, 46, 47, 6, 9, 48, 49, - 50, 18, 58, 59, 12, 13, 10, 60, 51, 52, - 53, 13, 21, 39, 40, 41, 60, 61, 62, 63, - 64, 67, 72, 75, 76, 77, 79, 81, 52, 13, - 56, 73, 13, 39, 69, 70, 71, 74, 4, 4, - 11, 7, 8, 24, 23, 80, 6, 8, 14, 30, - 31, 32, 33, 34, 35, 82, 36, 37, 27, 38, - 13, 65, 66, 68, 70, 61, 63, 69, 63, 13, - 13, 55, 70, 70, 70, 70, 70, 70, 70, 22, - 71, 71, 74, 74, 5, 6, 5, 6, 25, 54, - 63, 66, 70, 78, 7, 63 + 0, 44, 45, 0, 3, 13, 4, 13, 59, 5, + 6, 7, 13, 15, 46, 49, 6, 9, 50, 51, + 52, 47, 12, 60, 53, 54, 55, 18, 48, 61, + 54, 13, 58, 13, 10, 63, 6, 8, 62, 13, + 21, 39, 40, 41, 63, 64, 65, 66, 67, 70, + 75, 78, 79, 80, 82, 84, 13, 13, 57, 7, + 76, 13, 39, 72, 73, 74, 77, 4, 4, 11, + 7, 8, 24, 23, 83, 56, 46, 14, 30, 31, + 32, 33, 34, 35, 85, 36, 37, 27, 38, 13, + 68, 69, 71, 73, 64, 66, 72, 66, 7, 73, + 73, 73, 73, 73, 73, 73, 22, 74, 74, 77, + 77, 5, 6, 5, 6, 25, 66, 69, 73, 81, + 66 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int8 yyr1[] = { - 0, 43, 45, 44, 46, 47, 47, 48, 50, 49, - 49, 51, 51, 53, 54, 52, 55, 56, 56, 57, - 57, 58, 59, 59, 60, 61, 61, 61, 62, 62, - 63, 63, 63, 63, 63, 63, 64, 65, 65, 66, - 67, 68, 68, 69, 69, 69, 69, 69, 69, 69, - 70, 70, 70, 71, 71, 71, 73, 72, 74, 74, - 75, 77, 78, 76, 79, 80, 80, 82, 81 + 0, 43, 45, 44, 47, 48, 46, 49, 49, 50, + 52, 51, 51, 53, 53, 55, 56, 54, 57, 58, + 58, 59, 59, 60, 60, 62, 61, 63, 64, 64, + 64, 65, 65, 66, 66, 66, 66, 66, 66, 67, + 68, 68, 69, 70, 71, 71, 72, 72, 72, 72, + 72, 72, 72, 73, 73, 73, 74, 74, 74, 76, + 75, 77, 77, 78, 80, 81, 79, 82, 83, 83, + 85, 84 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { - 0, 2, 0, 9, 4, 2, 0, 1, 0, 3, - 0, 2, 1, 0, 0, 6, 1, 3, 1, 3, - 1, 1, 2, 0, 3, 3, 2, 0, 3, 1, - 1, 1, 1, 1, 1, 1, 4, 3, 1, 1, - 4, 3, 1, 3, 3, 3, 3, 3, 3, 1, - 3, 3, 1, 3, 3, 1, 0, 4, 1, 1, - 1, 0, 0, 6, 2, 2, 0, 0, 5 + 0, 2, 0, 9, 0, 0, 6, 2, 0, 1, + 0, 3, 0, 2, 1, 0, 0, 6, 1, 3, + 1, 3, 1, 2, 0, 0, 5, 3, 3, 2, + 0, 3, 1, 1, 1, 1, 1, 1, 1, 4, + 3, 1, 1, 4, 3, 1, 3, 3, 3, 3, + 3, 3, 1, 3, 3, 1, 3, 3, 1, 0, + 4, 1, 1, 1, 0, 0, 6, 2, 2, 0, + 0, 5 }; @@ -1238,7 +1251,7 @@ yyreduce: { geraCodigo (NULL, "INPP"); } -#line 1242 "compilador.tab.c" +#line 1255 "compilador.tab.c" break; case 3: /* programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO */ @@ -1246,11 +1259,36 @@ yyreduce: { geraCodigo (NULL, "PARA"); } -#line 1250 "compilador.tab.c" +#line 1263 "compilador.tab.c" break; - case 4: /* bloco: parte_declara_rotulos parte_declara_vars parte_declara_subrotinas comando_composto */ -#line 59 "compilador.y" + case 4: /* $@2: %empty */ +#line 58 "compilador.y" + { + char r_main[4]; + sprintf(r_main, "R%02d", rot_id); + empilha(r_main, rot); + rot_id += 1; + char buffer[50]; + strcpy(buffer,"DSVS "); + strcat(buffer,r_main); + geraCodigo(NULL,buffer); + } +#line 1278 "compilador.tab.c" + break; + + case 5: /* $@3: %empty */ +#line 69 "compilador.y" + { + char r_main[4]; + desempilha(r_main,rot); + geraCodigo(r_main,"NADA"); + } +#line 1288 "compilador.tab.c" + break; + + case 6: /* bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto */ +#line 75 "compilador.y" { retira(desloc,ts); char buffer[50]; @@ -1258,33 +1296,33 @@ yyreduce: geraCodigo(NULL,buffer); desloc = 0; } -#line 1262 "compilador.tab.c" +#line 1300 "compilador.tab.c" break; - case 8: /* $@2: %empty */ -#line 77 "compilador.y" + case 10: /* $@4: %empty */ +#line 93 "compilador.y" { } -#line 1268 "compilador.tab.c" +#line 1306 "compilador.tab.c" break; - case 13: /* $@3: %empty */ -#line 85 "compilador.y" + case 15: /* $@5: %empty */ +#line 101 "compilador.y" { num_vars = 0; } -#line 1274 "compilador.tab.c" +#line 1312 "compilador.tab.c" break; - case 14: /* $@4: %empty */ -#line 88 "compilador.y" + case 16: /* $@6: %empty */ +#line 104 "compilador.y" { /* AMEM num_vars */ char buffer[50]; sprintf(buffer, "AMEM %d", num_vars); geraCodigo(NULL, buffer); } -#line 1284 "compilador.tab.c" +#line 1322 "compilador.tab.c" break; - case 16: /* tipo: IDENT */ -#line 97 "compilador.y" + case 18: /* tipo: IDENT */ +#line 113 "compilador.y" { if (strcmp(token, "integer") == 0) { atualiza_tipo(num_vars, INTEIRO, ts); @@ -1295,11 +1333,11 @@ yyreduce: } //mostra_ts(ts); // Mostra a tabela após a inserção } -#line 1299 "compilador.tab.c" +#line 1337 "compilador.tab.c" break; - case 17: /* lista_id_var: lista_id_var VIRGULA IDENT */ -#line 110 "compilador.y" + case 19: /* lista_id_var: lista_id_var VIRGULA IDENT */ +#line 126 "compilador.y" { /* insere �ltima vars na tabela de s�mbolos */ num_vars += 1; info_t info; @@ -1308,11 +1346,11 @@ yyreduce: insere_ts(token,VS,nivel_lexico,info,ts); desloc += 1; } -#line 1312 "compilador.tab.c" +#line 1350 "compilador.tab.c" break; - case 18: /* lista_id_var: IDENT */ -#line 118 "compilador.y" + case 20: /* lista_id_var: IDENT */ +#line 134 "compilador.y" { num_vars += 1; info_t info; @@ -1322,11 +1360,39 @@ yyreduce: desloc += 1; /* insere vars na tabela de s�mbolos */ } -#line 1326 "compilador.tab.c" +#line 1364 "compilador.tab.c" break; - case 39: /* simb_leitura: IDENT */ -#line 173 "compilador.y" + case 25: /* $@7: %empty */ +#line 156 "compilador.y" + { + // Insere o procedimento na tabela de símbolos + info_t info; + char r_proc[4]; + sprintf(r_proc, "R%02d", rot_id); + rot_id += 1; + info.pr.rot = r_proc; + info.pr.quant = 0; + info.pr.param = NULL; + nivel_lexico += 1; + insere_ts(token, PR, nivel_lexico, info, ts); + + char buffer[50]; + sprintf(buffer,"ENPR %d",nivel_lexico); + geraCodigo(r_proc,buffer); + //mostra_ts(ts); + } +#line 1386 "compilador.tab.c" + break; + + case 26: /* declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco */ +#line 174 "compilador.y" + { nivel_lexico -= 1; } +#line 1392 "compilador.tab.c" + break; + + case 42: /* simb_leitura: IDENT */ +#line 208 "compilador.y" { geraCodigo(NULL, "LEIT"); l_elem = busca(token,ts); @@ -1334,107 +1400,107 @@ yyreduce: sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->info.vs.desloc); geraCodigo(NULL,buffer); } -#line 1338 "compilador.tab.c" +#line 1404 "compilador.tab.c" break; - case 41: /* lista_escritas: lista_escritas VIRGULA expressao_simples */ -#line 185 "compilador.y" + case 44: /* lista_escritas: lista_escritas VIRGULA expressao_simples */ +#line 220 "compilador.y" { geraCodigo(NULL,"IMPR"); } -#line 1346 "compilador.tab.c" +#line 1412 "compilador.tab.c" break; - case 42: /* lista_escritas: expressao_simples */ -#line 188 "compilador.y" + case 45: /* lista_escritas: expressao_simples */ +#line 223 "compilador.y" { geraCodigo(NULL,"IMPR"); } -#line 1354 "compilador.tab.c" +#line 1420 "compilador.tab.c" break; - case 43: /* expressao: expressao IGUAL expressao_simples */ -#line 193 "compilador.y" + case 46: /* expressao: expressao IGUAL expressao_simples */ +#line 228 "compilador.y" { geraCodigo(NULL, "CMIG"); // Adiciona operação de cmig } -#line 1362 "compilador.tab.c" +#line 1428 "compilador.tab.c" break; - case 44: /* expressao: expressao DIFERENTE expressao_simples */ -#line 196 "compilador.y" + case 47: /* expressao: expressao DIFERENTE expressao_simples */ +#line 231 "compilador.y" { geraCodigo(NULL, "CMDG"); // Adiciona operação de cmdg } -#line 1370 "compilador.tab.c" +#line 1436 "compilador.tab.c" break; - case 45: /* expressao: expressao MENOR expressao_simples */ -#line 199 "compilador.y" + case 48: /* expressao: expressao MENOR expressao_simples */ +#line 234 "compilador.y" { geraCodigo(NULL, "CMME"); // Adiciona operação de cmme } -#line 1378 "compilador.tab.c" +#line 1444 "compilador.tab.c" break; - case 46: /* expressao: expressao MENOR_IGUAL expressao_simples */ -#line 202 "compilador.y" + case 49: /* expressao: expressao MENOR_IGUAL expressao_simples */ +#line 237 "compilador.y" { geraCodigo(NULL, "CMEG"); // Adiciona operação de cmeg } -#line 1386 "compilador.tab.c" +#line 1452 "compilador.tab.c" break; - case 47: /* expressao: expressao MAIOR expressao_simples */ -#line 205 "compilador.y" + case 50: /* expressao: expressao MAIOR expressao_simples */ +#line 240 "compilador.y" { geraCodigo(NULL, "CMMA"); // Adiciona operação de cmma } -#line 1394 "compilador.tab.c" +#line 1460 "compilador.tab.c" break; - case 48: /* expressao: expressao MAIOR_IGUAL expressao_simples */ -#line 208 "compilador.y" + case 51: /* expressao: expressao MAIOR_IGUAL expressao_simples */ +#line 243 "compilador.y" { geraCodigo(NULL, "CMAG"); // Adiciona operação de cmag } -#line 1402 "compilador.tab.c" +#line 1468 "compilador.tab.c" break; - case 50: /* expressao_simples: expressao_simples MAIS termo */ -#line 214 "compilador.y" + case 53: /* expressao_simples: expressao_simples MAIS termo */ +#line 249 "compilador.y" { geraCodigo(NULL, "SOMA"); // Adiciona operação de soma } -#line 1410 "compilador.tab.c" +#line 1476 "compilador.tab.c" break; - case 51: /* expressao_simples: expressao_simples MENOS termo */ -#line 217 "compilador.y" + case 54: /* expressao_simples: expressao_simples MENOS termo */ +#line 252 "compilador.y" { geraCodigo(NULL, "SUBT"); // Adiciona operação de subt } -#line 1418 "compilador.tab.c" +#line 1484 "compilador.tab.c" break; - case 53: /* termo: termo ASTERISCO fator */ -#line 223 "compilador.y" + case 56: /* termo: termo ASTERISCO fator */ +#line 258 "compilador.y" { geraCodigo(NULL, "MULT"); // Adiciona operação de mult } -#line 1426 "compilador.tab.c" +#line 1492 "compilador.tab.c" break; - case 54: /* termo: termo DIV fator */ -#line 226 "compilador.y" + case 57: /* termo: termo DIV fator */ +#line 261 "compilador.y" { geraCodigo(NULL, "DIVI"); // Adiciona operação de divi } -#line 1434 "compilador.tab.c" +#line 1500 "compilador.tab.c" break; - case 56: /* $@5: %empty */ -#line 232 "compilador.y" + case 59: /* $@8: %empty */ +#line 267 "compilador.y" { // Busca variável no lado esquerdo l_elem = busca(token, ts); @@ -1445,22 +1511,22 @@ yyreduce: destino_desloc = l_elem->info.vs.desloc; } } -#line 1449 "compilador.tab.c" +#line 1515 "compilador.tab.c" break; - case 57: /* atribuicao: IDENT $@5 ATRIBUICAO expressao_simples */ -#line 241 "compilador.y" + case 60: /* atribuicao: IDENT $@8 ATRIBUICAO expressao_simples */ +#line 276 "compilador.y" { // Gera código ARMZ para armazenar valor char buffer[50]; sprintf(buffer, "ARMZ %d,%d", destino_nivel, destino_desloc); geraCodigo(NULL, buffer); } -#line 1460 "compilador.tab.c" +#line 1526 "compilador.tab.c" break; - case 58: /* fator: IDENT */ -#line 249 "compilador.y" + case 61: /* fator: IDENT */ +#line 284 "compilador.y" { // Carrega variável l_elem = busca(token, ts); @@ -1472,22 +1538,22 @@ yyreduce: geraCodigo(NULL, buffer); } } -#line 1476 "compilador.tab.c" +#line 1542 "compilador.tab.c" break; - case 59: /* fator: NUMERO */ -#line 260 "compilador.y" + case 62: /* fator: NUMERO */ +#line 295 "compilador.y" { // Empilha constante char buffer[50]; sprintf(buffer, "CRCT %s", token); geraCodigo(NULL, buffer); } -#line 1487 "compilador.tab.c" +#line 1553 "compilador.tab.c" break; - case 61: /* $@6: %empty */ -#line 269 "compilador.y" + case 64: /* $@9: %empty */ +#line 304 "compilador.y" { char r_ini[4]; sprintf(r_ini, "R%02d", rot_id); @@ -1495,11 +1561,11 @@ yyreduce: rot_id += 1; geraCodigo(r_ini,"NADA"); } -#line 1499 "compilador.tab.c" +#line 1565 "compilador.tab.c" break; - case 62: /* $@7: %empty */ -#line 276 "compilador.y" + case 65: /* $@10: %empty */ +#line 311 "compilador.y" { char r_fim[4]; sprintf(r_fim, "R%02d", rot_id); @@ -1510,11 +1576,11 @@ yyreduce: strcat(buffer,r_fim); geraCodigo(NULL,buffer); } -#line 1514 "compilador.tab.c" +#line 1580 "compilador.tab.c" break; - case 63: /* comando_repetitivo: $@6 WHILE expressao DO $@7 comando_sem_rotulo */ -#line 286 "compilador.y" + case 66: /* comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo */ +#line 321 "compilador.y" { char r_ini[4]; char r_fim[4]; @@ -1529,21 +1595,21 @@ yyreduce: geraCodigo(r_fim,"NADA"); } -#line 1533 "compilador.tab.c" +#line 1599 "compilador.tab.c" break; - case 64: /* comando_condicional: if_then cond_else */ -#line 302 "compilador.y" + case 67: /* comando_condicional: if_then cond_else */ +#line 337 "compilador.y" { char r_fim[4]; desempilha(r_fim,rot); geraCodigo(r_fim,"NADA"); } -#line 1543 "compilador.tab.c" +#line 1609 "compilador.tab.c" break; - case 67: /* $@8: %empty */ -#line 314 "compilador.y" + case 70: /* $@11: %empty */ +#line 349 "compilador.y" { char r_else[4]; sprintf(r_else,"R%02d",rot_id); @@ -1559,11 +1625,11 @@ yyreduce: empilha(r_fim, rot); rot_id += 1; } -#line 1563 "compilador.tab.c" +#line 1629 "compilador.tab.c" break; - case 68: /* if_then: IF expressao $@8 THEN comando_sem_rotulo */ -#line 329 "compilador.y" + case 71: /* if_then: IF expressao $@11 THEN comando_sem_rotulo */ +#line 364 "compilador.y" { char r_fim[4]; desempilha(r_fim,rot); @@ -1578,11 +1644,11 @@ yyreduce: geraCodigo(r_else,"NADA"); } -#line 1582 "compilador.tab.c" +#line 1648 "compilador.tab.c" break; -#line 1586 "compilador.tab.c" +#line 1652 "compilador.tab.c" default: break; } @@ -1775,7 +1841,7 @@ yyreturnlab: return yyresult; } -#line 346 "compilador.y" +#line 381 "compilador.y" int main (int argc, char** argv) { diff --git a/compilador.y b/compilador.y index 5f26621..d231df9 100644 --- a/compilador.y +++ b/compilador.y @@ -54,7 +54,23 @@ programa :{ bloco : parte_declara_rotulos parte_declara_vars + + { + char r_main[4]; + sprintf(r_main, "R%02d", rot_id); + empilha(r_main, rot); + rot_id += 1; + char buffer[50]; + strcpy(buffer,"DSVS "); + strcat(buffer,r_main); + geraCodigo(NULL,buffer); + } parte_declara_subrotinas + { + char r_main[4]; + desempilha(r_main,rot); + geraCodigo(r_main,"NADA"); + } comando_composto { retira(desloc,ts); @@ -131,12 +147,31 @@ lista_idents: lista_idents VIRGULA IDENT ; // REGRA 11 -parte_declara_subrotinas: declaracao_procedimento +parte_declara_subrotinas: parte_declara_subrotinas + declaracao_procedimento + | ; // REGRA 12 -declaracao_procedimento: PROCEDURE IDENT - | +declaracao_procedimento: PROCEDURE IDENT { + // Insere o procedimento na tabela de símbolos + info_t info; + char r_proc[4]; + sprintf(r_proc, "R%02d", rot_id); + rot_id += 1; + info.pr.rot = r_proc; + info.pr.quant = 0; + info.pr.param = NULL; + nivel_lexico += 1; + insere_ts(token, PR, nivel_lexico, info, ts); + + char buffer[50]; + sprintf(buffer,"ENPR %d",nivel_lexico); + geraCodigo(r_proc,buffer); + //mostra_ts(ts); + } + PONTO_E_VIRGULA bloco + { nivel_lexico -= 1; } ; diff --git a/teste6.pas b/teste6.pas index d72b688..52ee27e 100644 --- a/teste6.pas +++ b/teste6.pas @@ -1,5 +1,10 @@ program proc1 (input, output); var x: integer; + procedure p; + var z: integer; + begin + z := 3; + end begin x := 8; end. \ No newline at end of file -- GitLab