diff --git a/MEPA b/MEPA index 5cef5cf2aab9f819742d67e6ae71423cdc7759e9..bee9de574cd434d8d93eaf8cdd2ec33f1987aeb0 100644 --- a/MEPA +++ b/MEPA @@ -11,3 +11,6 @@ R02: NADA R00: NADA CRCT 8 ARMZ 0,0 + CHPR R01,0 + DMEM 0 + PARA diff --git a/compilador.output b/compilador.output index 07373e0ab069cde4c15e2f97a8e05a34a57514f3..9400ad8b86d9e1875bfa899d16e01500d58a1944 100644 --- a/compilador.output +++ b/compilador.output @@ -1,49 +1,49 @@ -Terminals which are not used +Terminais sem uso na gramática - TYPE - ARRAY - FUNCTION - GOTO - OR - AND - NOT + TYPE + ARRAY + FUNCTION + GOTO + OR + AND + NOT -State 71 conflicts: 1 reduce/reduce +Estado 70 conflitos: 1 de redução/redução -Grammar +Gramática 0 $accept: programa $end - 1 @1: /* empty */ + 1 $@1: ε - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 3 @2: /* empty */ + 3 $@2: ε - 4 @3: /* empty */ + 4 $@3: ε - 5 bloco: parte_declara_rotulos parte_declara_vars @2 parte_declara_subrotinas @3 comando_composto + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto 6 parte_declara_rotulos: LABEL VIRGULA - 7 | /* empty */ + 7 | ε 8 parte_declara_vars: var - 9 @4: /* empty */ + 9 $@4: ε - 10 var: @4 VAR declara_vars - 11 | /* empty */ + 10 var: $@4 VAR declara_vars + 11 | ε 12 declara_vars: declara_vars declara_var 13 | declara_var - 14 @5: /* empty */ + 14 $@5: ε - 15 @6: /* empty */ + 15 $@6: ε - 16 declara_var: @5 lista_id_var DOIS_PONTOS tipo @6 PONTO_E_VIRGULA + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA 17 tipo: IDENT @@ -54,1427 +54,1500 @@ Grammar 21 | IDENT 22 parte_declara_subrotinas: parte_declara_subrotinas declaracao_procedimento - 23 | /* empty */ + 23 | ε - 24 @7: /* empty */ + 24 $@7: ε - 25 declaracao_procedimento: PROCEDURE IDENT @7 PONTO_E_VIRGULA bloco + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco 26 comando_composto: T_BEGIN comandos T_END 27 comandos: comando PONTO_E_VIRGULA comandos 28 | comando PONTO_E_VIRGULA - 29 | /* empty */ + 29 | ε 30 comando: numero DOIS_PONTOS comando_sem_rotulo 31 | comando_sem_rotulo - 32 comando_sem_rotulo: atribuicao + 32 comando_sem_rotulo: atribuicao_ou_procedimento 33 | comando_composto 34 | comando_condicional 35 | comando_repetitivo 36 | leitura 37 | escrita - 38 | chamada_procedimento - - 39 chamada_procedimento: /* empty */ - - 40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES - 41 lista_leituras: lista_leituras VIRGULA simb_leitura - 42 | simb_leitura - - 43 simb_leitura: IDENT - - 44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES - - 45 lista_escritas: lista_escritas VIRGULA expressao_simples - 46 | expressao_simples - - 47 expressao: expressao IGUAL expressao_simples - 48 | expressao DIFERENTE expressao_simples - 49 | expressao MENOR expressao_simples - 50 | expressao MENOR_IGUAL expressao_simples - 51 | expressao MAIOR expressao_simples - 52 | expressao MAIOR_IGUAL expressao_simples - 53 | expressao_simples - - 54 expressao_simples: expressao_simples MAIS termo - 55 | expressao_simples MENOS termo - 56 | termo - - 57 termo: termo ASTERISCO fator - 58 | termo DIV fator - 59 | fator - - 60 @8: /* empty */ - - 61 atribuicao: IDENT @8 ATRIBUICAO expressao_simples - - 62 fator: IDENT - 63 | NUMERO - - 64 numero: NUMERO - - 65 @9: /* empty */ - - 66 @10: /* empty */ - - 67 comando_repetitivo: @9 WHILE expressao DO @10 comando_sem_rotulo - - 68 comando_condicional: if_then cond_else - - 69 cond_else: ELSE comando_sem_rotulo - 70 | /* empty */ - - 71 @11: /* empty */ - - 72 if_then: IF expressao @11 THEN comando_sem_rotulo - - -Terminals, with rules where they appear - -$end (0) 0 -error (256) -PROGRAM (258) 2 -ABRE_PARENTESES (259) 2 40 44 -FECHA_PARENTESES (260) 2 40 44 -VIRGULA (261) 6 18 20 41 45 -PONTO_E_VIRGULA (262) 2 16 25 27 28 -DOIS_PONTOS (263) 16 30 -PONTO (264) 2 -T_BEGIN (265) 26 -T_END (266) 26 -VAR (267) 10 -IDENT (268) 2 17 18 19 20 21 25 43 61 62 -ATRIBUICAO (269) 61 -LABEL (270) 6 -TYPE (271) -ARRAY (272) -PROCEDURE (273) 25 -FUNCTION (274) -GOTO (275) -IF (276) 72 -THEN (277) 72 -ELSE (278) 69 -WHILE (279) 67 -DO (280) 67 -OR (281) -DIV (282) 58 -AND (283) -NOT (284) -IGUAL (285) 47 -DIFERENTE (286) 48 -MENOR_IGUAL (287) 50 -MAIOR_IGUAL (288) 52 -MENOR (289) 49 -MAIOR (290) 51 -MAIS (291) 54 -MENOS (292) 55 -ASTERISCO (293) 57 -NUMERO (294) 63 64 -READ (295) 40 -WRITE (296) 44 -LOWER_THAN_ELSE (297) - - -Nonterminals, with rules where they appear - -$accept (43) - on left: 0 -programa (44) - on left: 2, on right: 0 -@1 (45) - on left: 1, on right: 2 -bloco (46) - on left: 5, on right: 2 25 -@2 (47) - on left: 3, on right: 5 -@3 (48) - on left: 4, on right: 5 -parte_declara_rotulos (49) - on left: 6 7, on right: 5 -parte_declara_vars (50) - on left: 8, on right: 5 -var (51) - on left: 10 11, on right: 8 -@4 (52) - on left: 9, on right: 10 -declara_vars (53) - on left: 12 13, on right: 10 12 -declara_var (54) - on left: 16, on right: 12 13 -@5 (55) - on left: 14, on right: 16 -@6 (56) - on left: 15, on right: 16 -tipo (57) - on left: 17, on right: 16 -lista_id_var (58) - on left: 18 19, on right: 16 18 -lista_idents (59) - on left: 20 21, on right: 2 20 -parte_declara_subrotinas (60) - on left: 22 23, on right: 5 22 -declaracao_procedimento (61) - on left: 25, on right: 22 -@7 (62) - on left: 24, on right: 25 -comando_composto (63) - on left: 26, on right: 5 33 -comandos (64) - on left: 27 28 29, on right: 26 27 -comando (65) - on left: 30 31, on right: 27 28 -comando_sem_rotulo (66) - on left: 32 33 34 35 36 37 38, on right: 30 31 67 69 72 -chamada_procedimento (67) - on left: 39, on right: 38 -leitura (68) - on left: 40, on right: 36 -lista_leituras (69) - on left: 41 42, on right: 40 41 -simb_leitura (70) - on left: 43, on right: 41 42 -escrita (71) - on left: 44, on right: 37 -lista_escritas (72) - on left: 45 46, on right: 44 45 -expressao (73) - on left: 47 48 49 50 51 52 53, on right: 47 48 49 50 51 52 67 72 -expressao_simples (74) - on left: 54 55 56, on right: 45 46 47 48 49 50 51 52 53 54 55 61 -termo (75) - on left: 57 58 59, on right: 54 55 56 57 58 -atribuicao (76) - on left: 61, on right: 32 -@8 (77) - on left: 60, on right: 61 -fator (78) - on left: 62 63, on right: 57 58 59 -numero (79) - on left: 64, on right: 30 -comando_repetitivo (80) - on left: 67, on right: 35 -@9 (81) - on left: 65, on right: 67 -@10 (82) - on left: 66, on right: 67 -comando_condicional (83) - on left: 68, on right: 34 -cond_else (84) - on left: 69 70, on right: 68 -if_then (85) - on left: 72, on right: 68 -@11 (86) - on left: 71, on right: 72 + 38 $@8: ε + 39 atribuicao_ou_procedimento: IDENT $@8 atribuicao_ou_procedimento_token -state 0 + 40 atribuicao_ou_procedimento_token: atribuicao + 41 | chamada_procedimento - 0 $accept: . programa $end + 42 $@9: ε - $default reduce using rule 1 (@1) + 43 atribuicao: $@9 ATRIBUICAO expressao_simples - programa go to state 1 - @1 go to state 2 + 44 chamada_procedimento: ε + 45 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES -state 1 + 46 lista_leituras: lista_leituras VIRGULA simb_leitura + 47 | simb_leitura - 0 $accept: programa . $end + 48 simb_leitura: IDENT + + 49 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES + + 50 lista_escritas: lista_escritas VIRGULA expressao_simples + 51 | 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 + + 59 expressao_simples: expressao_simples MAIS termo + 60 | expressao_simples MENOS termo + 61 | termo + + 62 termo: termo ASTERISCO fator + 63 | termo DIV fator + 64 | fator + + 65 fator: IDENT + 66 | NUMERO + + 67 numero: NUMERO + + 68 $@10: ε + + 69 $@11: ε + + 70 comando_repetitivo: $@10 WHILE expressao DO $@11 comando_sem_rotulo + + 71 comando_condicional: if_then cond_else + + 72 cond_else: ELSE comando_sem_rotulo + 73 | ε + + 74 $@12: ε + + 75 if_then: IF expressao $@12 THEN comando_sem_rotulo + + +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 + PONTO (264) 2 + T_BEGIN (265) 26 + T_END (266) 26 + VAR (267) 10 + IDENT (268) 2 17 18 19 20 21 25 39 48 65 + ATRIBUICAO (269) 43 + 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 + OR (281) + DIV (282) 63 + 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 + LOWER_THAN_ELSE (297) + + +Não terminais com as regras onde eles aparecem + + $accept (43) + à esquerda: 0 + programa (44) + à esquerda: 2 + à direita: 0 + $@1 (45) + à esquerda: 1 + à direita: 2 + bloco (46) + à esquerda: 5 + à direita: 2 25 + $@2 (47) + à esquerda: 3 + à 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 + $@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: 16 + $@6 (56) + à esquerda: 15 + à direita: 16 + tipo (57) + à esquerda: 17 + à direita: 16 + lista_id_var (58) + à esquerda: 18 19 + à 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 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 + à direita: 39 + atribuicao (70) + à esquerda: 43 + à direita: 40 + $@9 (71) + à esquerda: 42 + à 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 - $end shift, and go to state 3 +Estado 0 -state 2 + 0 $accept: • programa $end - 2 programa: @1 . PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + $padrão reduzir usando a regra 1 ($@1) - PROGRAM shift, and go to state 4 + programa ir ao estado 1 + $@1 ir ao estado 2 -state 3 +Estado 1 - 0 $accept: programa $end . + 0 $accept: programa • $end - $default accept + $end deslocar, e ir ao estado 3 -state 4 +Estado 2 - 2 programa: @1 PROGRAM . IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + 2 programa: $@1 • PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - IDENT shift, and go to state 5 + PROGRAM deslocar, e ir ao estado 4 -state 5 +Estado 3 - 2 programa: @1 PROGRAM IDENT . ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + 0 $accept: programa $end • - ABRE_PARENTESES shift, and go to state 6 + $padrão aceitar -state 6 +Estado 4 - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES . lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + 2 programa: $@1 PROGRAM • IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - IDENT shift, and go to state 7 + IDENT deslocar, e ir ao estado 5 - lista_idents go to state 8 +Estado 5 -state 7 + 2 programa: $@1 PROGRAM IDENT • ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 21 lista_idents: IDENT . + ABRE_PARENTESES deslocar, e ir ao estado 6 - $default reduce using rule 21 (lista_idents) +Estado 6 -state 8 + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES • lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents . FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO - 20 lista_idents: lista_idents . VIRGULA IDENT + IDENT deslocar, e ir ao estado 7 - FECHA_PARENTESES shift, and go to state 9 - VIRGULA shift, and go to state 10 + lista_idents ir ao estado 8 -state 9 +Estado 7 - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES . PONTO_E_VIRGULA bloco PONTO + 21 lista_idents: IDENT • - PONTO_E_VIRGULA shift, and go to state 11 + $padrão reduzir usando a regra 21 (lista_idents) -state 10 +Estado 8 - 20 lista_idents: lista_idents VIRGULA . IDENT + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents • FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO + 20 lista_idents: lista_idents • VIRGULA IDENT - IDENT shift, and go to state 12 + FECHA_PARENTESES deslocar, e ir ao estado 9 + VIRGULA deslocar, e ir ao estado 10 -state 11 +Estado 9 - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA . bloco PONTO + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES • PONTO_E_VIRGULA bloco PONTO - LABEL shift, and go to state 13 + PONTO_E_VIRGULA deslocar, e ir ao estado 11 - $default reduce using rule 7 (parte_declara_rotulos) - bloco go to state 14 - parte_declara_rotulos go to state 15 +Estado 10 + 20 lista_idents: lista_idents VIRGULA • IDENT -state 12 + IDENT deslocar, e ir ao estado 12 - 20 lista_idents: lista_idents VIRGULA IDENT . - $default reduce using rule 20 (lista_idents) +Estado 11 + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA • bloco PONTO -state 13 + LABEL deslocar, e ir ao estado 13 - 6 parte_declara_rotulos: LABEL . VIRGULA + $padrão reduzir usando a regra 7 (parte_declara_rotulos) - VIRGULA shift, and go to state 16 + bloco ir ao estado 14 + parte_declara_rotulos ir ao estado 15 -state 14 +Estado 12 - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco . PONTO + 20 lista_idents: lista_idents VIRGULA IDENT • - PONTO shift, and go to state 17 + $padrão reduzir usando a regra 20 (lista_idents) -state 15 +Estado 13 - 5 bloco: parte_declara_rotulos . parte_declara_vars @2 parte_declara_subrotinas @3 comando_composto + 6 parte_declara_rotulos: LABEL • VIRGULA - VAR reduce using rule 9 (@4) - $default reduce using rule 11 (var) + VIRGULA deslocar, e ir ao estado 16 - parte_declara_vars go to state 18 - var go to state 19 - @4 go to state 20 +Estado 14 -state 16 + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco • PONTO - 6 parte_declara_rotulos: LABEL VIRGULA . + PONTO deslocar, e ir ao estado 17 - $default reduce using rule 6 (parte_declara_rotulos) +Estado 15 -state 17 + 5 bloco: parte_declara_rotulos • parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto - 2 programa: @1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO . + VAR reduzir usando a regra 9 ($@4) + $padrão reduzir usando a regra 11 (var) - $default reduce using rule 2 (programa) + parte_declara_vars ir ao estado 18 + var ir ao estado 19 + $@4 ir ao estado 20 -state 18 +Estado 16 - 5 bloco: parte_declara_rotulos parte_declara_vars . @2 parte_declara_subrotinas @3 comando_composto + 6 parte_declara_rotulos: LABEL VIRGULA • - $default reduce using rule 3 (@2) + $padrão reduzir usando a regra 6 (parte_declara_rotulos) - @2 go to state 21 +Estado 17 -state 19 + 2 programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO • - 8 parte_declara_vars: var . + $padrão reduzir usando a regra 2 (programa) - $default reduce using rule 8 (parte_declara_vars) +Estado 18 -state 20 + 5 bloco: parte_declara_rotulos parte_declara_vars • $@2 parte_declara_subrotinas $@3 comando_composto - 10 var: @4 . VAR declara_vars + $padrão reduzir usando a regra 3 ($@2) - VAR shift, and go to state 22 + $@2 ir ao estado 21 -state 21 +Estado 19 - 5 bloco: parte_declara_rotulos parte_declara_vars @2 . parte_declara_subrotinas @3 comando_composto + 8 parte_declara_vars: var • - $default reduce using rule 23 (parte_declara_subrotinas) + $padrão reduzir usando a regra 8 (parte_declara_vars) - parte_declara_subrotinas go to state 23 +Estado 20 -state 22 + 10 var: $@4 • VAR declara_vars - 10 var: @4 VAR . declara_vars + VAR deslocar, e ir ao estado 22 - $default reduce using rule 14 (@5) - declara_vars go to state 24 - declara_var go to state 25 - @5 go to state 26 +Estado 21 + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 • parte_declara_subrotinas $@3 comando_composto -state 23 + $padrão reduzir usando a regra 23 (parte_declara_subrotinas) - 5 bloco: parte_declara_rotulos parte_declara_vars @2 parte_declara_subrotinas . @3 comando_composto - 22 parte_declara_subrotinas: parte_declara_subrotinas . declaracao_procedimento + parte_declara_subrotinas ir ao estado 23 - PROCEDURE shift, and go to state 27 - $default reduce using rule 4 (@3) +Estado 22 - @3 go to state 28 - declaracao_procedimento go to state 29 + 10 var: $@4 VAR • declara_vars + $padrão reduzir usando a regra 14 ($@5) -state 24 + declara_vars ir ao estado 24 + declara_var ir ao estado 25 + $@5 ir ao estado 26 - 10 var: @4 VAR declara_vars . - 12 declara_vars: declara_vars . declara_var - IDENT reduce using rule 14 (@5) - $default reduce using rule 10 (var) +Estado 23 - declara_var go to state 30 - @5 go to state 26 + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas • $@3 comando_composto + 22 parte_declara_subrotinas: parte_declara_subrotinas • declaracao_procedimento + PROCEDURE deslocar, e ir ao estado 27 -state 25 + $padrão reduzir usando a regra 4 ($@3) - 13 declara_vars: declara_var . + $@3 ir ao estado 28 + declaracao_procedimento ir ao estado 29 - $default reduce using rule 13 (declara_vars) +Estado 24 -state 26 + 10 var: $@4 VAR declara_vars • + 12 declara_vars: declara_vars • declara_var - 16 declara_var: @5 . lista_id_var DOIS_PONTOS tipo @6 PONTO_E_VIRGULA + IDENT reduzir usando a regra 14 ($@5) + $padrão reduzir usando a regra 10 (var) - IDENT shift, and go to state 31 + declara_var ir ao estado 30 + $@5 ir ao estado 26 - lista_id_var go to state 32 +Estado 25 -state 27 + 13 declara_vars: declara_var • - 25 declaracao_procedimento: PROCEDURE . IDENT @7 PONTO_E_VIRGULA bloco + $padrão reduzir usando a regra 13 (declara_vars) - IDENT shift, and go to state 33 +Estado 26 -state 28 + 16 declara_var: $@5 • lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA - 5 bloco: parte_declara_rotulos parte_declara_vars @2 parte_declara_subrotinas @3 . comando_composto + IDENT deslocar, e ir ao estado 31 - T_BEGIN shift, and go to state 34 + lista_id_var ir ao estado 32 - comando_composto go to state 35 +Estado 27 -state 29 + 25 declaracao_procedimento: PROCEDURE • IDENT $@7 PONTO_E_VIRGULA bloco - 22 parte_declara_subrotinas: parte_declara_subrotinas declaracao_procedimento . + IDENT deslocar, e ir ao estado 33 - $default reduce using rule 22 (parte_declara_subrotinas) +Estado 28 -state 30 + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 • comando_composto - 12 declara_vars: declara_vars declara_var . + T_BEGIN deslocar, e ir ao estado 34 - $default reduce using rule 12 (declara_vars) + comando_composto ir ao estado 35 -state 31 +Estado 29 - 19 lista_id_var: IDENT . + 22 parte_declara_subrotinas: parte_declara_subrotinas declaracao_procedimento • - $default reduce using rule 19 (lista_id_var) + $padrão reduzir usando a regra 22 (parte_declara_subrotinas) -state 32 +Estado 30 - 16 declara_var: @5 lista_id_var . DOIS_PONTOS tipo @6 PONTO_E_VIRGULA - 18 lista_id_var: lista_id_var . VIRGULA IDENT + 12 declara_vars: declara_vars declara_var • - VIRGULA shift, and go to state 36 - DOIS_PONTOS shift, and go to state 37 + $padrão reduzir usando a regra 12 (declara_vars) -state 33 +Estado 31 - 25 declaracao_procedimento: PROCEDURE IDENT . @7 PONTO_E_VIRGULA bloco + 19 lista_id_var: IDENT • - $default reduce using rule 24 (@7) + $padrão reduzir usando a regra 19 (lista_id_var) - @7 go to state 38 +Estado 32 -state 34 + 16 declara_var: $@5 lista_id_var • DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA + 18 lista_id_var: lista_id_var • VIRGULA IDENT - 26 comando_composto: T_BEGIN . comandos T_END + VIRGULA deslocar, e ir ao estado 36 + DOIS_PONTOS deslocar, e ir ao estado 37 - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - NUMERO shift, and go to state 41 - READ shift, and go to state 42 - WRITE shift, and go to state 43 - PONTO_E_VIRGULA reduce using rule 39 (chamada_procedimento) - WHILE reduce using rule 65 (@9) - $default reduce using rule 29 (comandos) +Estado 33 - comando_composto go to state 44 - comandos go to state 45 - comando go to state 46 - comando_sem_rotulo go to state 47 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - numero go to state 52 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 + 25 declaracao_procedimento: PROCEDURE IDENT • $@7 PONTO_E_VIRGULA bloco + $padrão reduzir usando a regra 24 ($@7) -state 35 + $@7 ir ao estado 38 - 5 bloco: parte_declara_rotulos parte_declara_vars @2 parte_declara_subrotinas @3 comando_composto . - $default reduce using rule 5 (bloco) +Estado 34 + 26 comando_composto: T_BEGIN • comandos T_END -state 36 + 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 - 18 lista_id_var: lista_id_var VIRGULA . IDENT + WHILE reduzir usando a regra 68 ($@10) + $padrão reduzir usando a regra 29 (comandos) - IDENT shift, and go to state 57 + comando_composto ir ao estado 44 + comandos ir ao estado 45 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + atribuicao_ou_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + numero ir ao estado 51 + comando_repetitivo ir ao estado 52 + $@10 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 -state 37 +Estado 35 - 16 declara_var: @5 lista_id_var DOIS_PONTOS . tipo @6 PONTO_E_VIRGULA + 5 bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto • - IDENT shift, and go to state 58 + $padrão reduzir usando a regra 5 (bloco) - tipo go to state 59 +Estado 36 -state 38 + 18 lista_id_var: lista_id_var VIRGULA • IDENT - 25 declaracao_procedimento: PROCEDURE IDENT @7 . PONTO_E_VIRGULA bloco + IDENT deslocar, e ir ao estado 56 - PONTO_E_VIRGULA shift, and go to state 60 +Estado 37 -state 39 + 16 declara_var: $@5 lista_id_var DOIS_PONTOS • tipo $@6 PONTO_E_VIRGULA - 61 atribuicao: IDENT . @8 ATRIBUICAO expressao_simples + IDENT deslocar, e ir ao estado 57 - $default reduce using rule 60 (@8) + tipo ir ao estado 58 - @8 go to state 61 +Estado 38 -state 40 + 25 declaracao_procedimento: PROCEDURE IDENT $@7 • PONTO_E_VIRGULA bloco - 72 if_then: IF . expressao @11 THEN comando_sem_rotulo + PONTO_E_VIRGULA deslocar, e ir ao estado 59 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 - expressao go to state 64 - expressao_simples go to state 65 - termo go to state 66 - fator go to state 67 +Estado 39 + 39 atribuicao_ou_procedimento: IDENT • $@8 atribuicao_ou_procedimento_token -state 41 + $padrão reduzir usando a regra 38 ($@8) - 64 numero: NUMERO . + $@8 ir ao estado 60 - $default reduce using rule 64 (numero) +Estado 40 -state 42 + 75 if_then: IF • expressao $@12 THEN comando_sem_rotulo - 40 leitura: READ . ABRE_PARENTESES lista_leituras FECHA_PARENTESES + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - ABRE_PARENTESES shift, and go to state 68 + expressao ir ao estado 63 + expressao_simples ir ao estado 64 + termo ir ao estado 65 + fator ir ao estado 66 -state 43 +Estado 41 - 44 escrita: WRITE . ABRE_PARENTESES lista_escritas FECHA_PARENTESES + 67 numero: NUMERO • - ABRE_PARENTESES shift, and go to state 69 + $padrão reduzir usando a regra 67 (numero) -state 44 +Estado 42 - 33 comando_sem_rotulo: comando_composto . + 45 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES - $default reduce using rule 33 (comando_sem_rotulo) + ABRE_PARENTESES deslocar, e ir ao estado 67 -state 45 +Estado 43 - 26 comando_composto: T_BEGIN comandos . T_END + 49 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES - T_END shift, and go to state 70 + ABRE_PARENTESES deslocar, e ir ao estado 68 -state 46 +Estado 44 - 27 comandos: comando . PONTO_E_VIRGULA comandos - 28 | comando . PONTO_E_VIRGULA + 33 comando_sem_rotulo: comando_composto • - PONTO_E_VIRGULA shift, and go to state 71 + $padrão reduzir usando a regra 33 (comando_sem_rotulo) -state 47 +Estado 45 - 31 comando: comando_sem_rotulo . + 26 comando_composto: T_BEGIN comandos • T_END - $default reduce using rule 31 (comando) + T_END deslocar, e ir ao estado 69 -state 48 +Estado 46 - 38 comando_sem_rotulo: chamada_procedimento . + 27 comandos: comando • PONTO_E_VIRGULA comandos + 28 | comando • PONTO_E_VIRGULA - $default reduce using rule 38 (comando_sem_rotulo) + PONTO_E_VIRGULA deslocar, e ir ao estado 70 -state 49 +Estado 47 - 36 comando_sem_rotulo: leitura . + 31 comando: comando_sem_rotulo • - $default reduce using rule 36 (comando_sem_rotulo) + $padrão reduzir usando a regra 31 (comando) -state 50 +Estado 48 - 37 comando_sem_rotulo: escrita . + 32 comando_sem_rotulo: atribuicao_ou_procedimento • - $default reduce using rule 37 (comando_sem_rotulo) + $padrão reduzir usando a regra 32 (comando_sem_rotulo) -state 51 +Estado 49 - 32 comando_sem_rotulo: atribuicao . + 36 comando_sem_rotulo: leitura • - $default reduce using rule 32 (comando_sem_rotulo) + $padrão reduzir usando a regra 36 (comando_sem_rotulo) -state 52 +Estado 50 - 30 comando: numero . DOIS_PONTOS comando_sem_rotulo + 37 comando_sem_rotulo: escrita • - DOIS_PONTOS shift, and go to state 72 + $padrão reduzir usando a regra 37 (comando_sem_rotulo) -state 53 +Estado 51 - 35 comando_sem_rotulo: comando_repetitivo . + 30 comando: numero • DOIS_PONTOS comando_sem_rotulo - $default reduce using rule 35 (comando_sem_rotulo) + DOIS_PONTOS deslocar, e ir ao estado 71 -state 54 +Estado 52 - 67 comando_repetitivo: @9 . WHILE expressao DO @10 comando_sem_rotulo + 35 comando_sem_rotulo: comando_repetitivo • - WHILE shift, and go to state 73 + $padrão reduzir usando a regra 35 (comando_sem_rotulo) -state 55 +Estado 53 - 34 comando_sem_rotulo: comando_condicional . + 70 comando_repetitivo: $@10 • WHILE expressao DO $@11 comando_sem_rotulo - $default reduce using rule 34 (comando_sem_rotulo) + WHILE deslocar, e ir ao estado 72 -state 56 +Estado 54 - 68 comando_condicional: if_then . cond_else + 34 comando_sem_rotulo: comando_condicional • - ELSE shift, and go to state 74 + $padrão reduzir usando a regra 34 (comando_sem_rotulo) - $default reduce using rule 70 (cond_else) - cond_else go to state 75 +Estado 55 + 71 comando_condicional: if_then • cond_else -state 57 + ELSE deslocar, e ir ao estado 73 - 18 lista_id_var: lista_id_var VIRGULA IDENT . + $padrão reduzir usando a regra 73 (cond_else) - $default reduce using rule 18 (lista_id_var) + cond_else ir ao estado 74 -state 58 +Estado 56 - 17 tipo: IDENT . + 18 lista_id_var: lista_id_var VIRGULA IDENT • - $default reduce using rule 17 (tipo) + $padrão reduzir usando a regra 18 (lista_id_var) -state 59 +Estado 57 - 16 declara_var: @5 lista_id_var DOIS_PONTOS tipo . @6 PONTO_E_VIRGULA + 17 tipo: IDENT • - $default reduce using rule 15 (@6) + $padrão reduzir usando a regra 17 (tipo) - @6 go to state 76 +Estado 58 -state 60 + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo • $@6 PONTO_E_VIRGULA - 25 declaracao_procedimento: PROCEDURE IDENT @7 PONTO_E_VIRGULA . bloco + $padrão reduzir usando a regra 15 ($@6) - LABEL shift, and go to state 13 + $@6 ir ao estado 75 - $default reduce using rule 7 (parte_declara_rotulos) - bloco go to state 77 - parte_declara_rotulos go to state 15 +Estado 59 + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA • bloco -state 61 + LABEL deslocar, e ir ao estado 13 - 61 atribuicao: IDENT @8 . ATRIBUICAO expressao_simples + $padrão reduzir usando a regra 7 (parte_declara_rotulos) - ATRIBUICAO shift, and go to state 78 + bloco ir ao estado 76 + parte_declara_rotulos ir ao estado 15 -state 62 +Estado 60 - 62 fator: IDENT . + 39 atribuicao_ou_procedimento: IDENT $@8 • atribuicao_ou_procedimento_token - $default reduce using rule 62 (fator) + 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 -state 63 - 63 fator: NUMERO . +Estado 61 - $default reduce using rule 63 (fator) + 65 fator: IDENT • + $padrão reduzir usando a regra 65 (fator) -state 64 - 47 expressao: expressao . IGUAL expressao_simples - 48 | expressao . DIFERENTE expressao_simples - 49 | expressao . MENOR expressao_simples - 50 | expressao . MENOR_IGUAL expressao_simples - 51 | expressao . MAIOR expressao_simples - 52 | expressao . MAIOR_IGUAL expressao_simples - 72 if_then: IF expressao . @11 THEN comando_sem_rotulo +Estado 62 - IGUAL shift, and go to state 79 - DIFERENTE shift, and go to state 80 - MENOR_IGUAL shift, and go to state 81 - MAIOR_IGUAL shift, and go to state 82 - MENOR shift, and go to state 83 - MAIOR shift, and go to state 84 + 66 fator: NUMERO • - $default reduce using rule 71 (@11) + $padrão reduzir usando a regra 66 (fator) - @11 go to state 85 +Estado 63 -state 65 + 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 - 53 expressao: expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo + 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 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + $padrão reduzir usando a regra 74 ($@12) - $default reduce using rule 53 (expressao) + $@12 ir ao estado 87 -state 66 +Estado 64 - 56 expressao_simples: termo . - 57 termo: termo . ASTERISCO fator - 58 | termo . DIV fator + 58 expressao: expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - DIV shift, and go to state 88 - ASTERISCO shift, and go to state 89 + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 - $default reduce using rule 56 (expressao_simples) + $padrão reduzir usando a regra 58 (expressao) -state 67 +Estado 65 - 59 termo: fator . + 61 expressao_simples: termo • + 62 termo: termo • ASTERISCO fator + 63 | termo • DIV fator - $default reduce using rule 59 (termo) + DIV deslocar, e ir ao estado 90 + ASTERISCO deslocar, e ir ao estado 91 + $padrão reduzir usando a regra 61 (expressao_simples) -state 68 - 40 leitura: READ ABRE_PARENTESES . lista_leituras FECHA_PARENTESES +Estado 66 - IDENT shift, and go to state 90 + 64 termo: fator • - lista_leituras go to state 91 - simb_leitura go to state 92 + $padrão reduzir usando a regra 64 (termo) -state 69 +Estado 67 - 44 escrita: WRITE ABRE_PARENTESES . lista_escritas FECHA_PARENTESES + 45 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + IDENT deslocar, e ir ao estado 92 - lista_escritas go to state 93 - expressao_simples go to state 94 - termo go to state 66 - fator go to state 67 + lista_leituras ir ao estado 93 + simb_leitura ir ao estado 94 -state 70 +Estado 68 - 26 comando_composto: T_BEGIN comandos T_END . + 49 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES - $default reduce using rule 26 (comando_composto) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + lista_escritas ir ao estado 95 + expressao_simples ir ao estado 96 + termo ir ao estado 65 + fator ir ao estado 66 -state 71 - 27 comandos: comando PONTO_E_VIRGULA . comandos - 28 | comando PONTO_E_VIRGULA . +Estado 69 - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - NUMERO shift, and go to state 41 - READ shift, and go to state 42 - WRITE shift, and go to state 43 + 26 comando_composto: T_BEGIN comandos T_END • - PONTO_E_VIRGULA reduce using rule 39 (chamada_procedimento) - T_END reduce using rule 28 (comandos) - T_END [reduce using rule 29 (comandos)] - WHILE reduce using rule 65 (@9) - $default reduce using rule 28 (comandos) + $padrão reduzir usando a regra 26 (comando_composto) - comando_composto go to state 44 - comandos go to state 95 - comando go to state 46 - comando_sem_rotulo go to state 47 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - numero go to state 52 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 +Estado 70 -state 72 + 27 comandos: comando PONTO_E_VIRGULA • comandos + 28 | comando PONTO_E_VIRGULA • - 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 + NUMERO deslocar, e ir ao estado 41 + READ deslocar, e ir ao estado 42 + WRITE deslocar, e ir ao estado 43 - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - READ shift, and go to state 42 - WRITE shift, and go to state 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) - WHILE reduce using rule 65 (@9) - $default reduce using rule 39 (chamada_procedimento) + comando_composto ir ao estado 44 + comandos ir ao estado 97 + comando ir ao estado 46 + comando_sem_rotulo ir ao estado 47 + atribuicao_ou_procedimento ir ao estado 48 + leitura ir ao estado 49 + escrita ir ao estado 50 + numero ir ao estado 51 + comando_repetitivo ir ao estado 52 + $@10 ir ao estado 53 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 - comando_composto go to state 44 - comando_sem_rotulo go to state 96 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 +Estado 71 -state 73 + 30 comando: numero DOIS_PONTOS • comando_sem_rotulo - 67 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 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + $padrão reduzir usando a regra 68 ($@10) - expressao go to state 97 - expressao_simples go to state 65 - termo go to state 66 - fator go to state 67 + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 98 + 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 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 -state 74 +Estado 72 - 69 cond_else: ELSE . comando_sem_rotulo + 70 comando_repetitivo: $@10 WHILE • expressao DO $@11 comando_sem_rotulo - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - READ shift, and go to state 42 - WRITE shift, and go to state 43 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - WHILE reduce using rule 65 (@9) - $default reduce using rule 39 (chamada_procedimento) + expressao ir ao estado 99 + expressao_simples ir ao estado 64 + termo ir ao estado 65 + fator ir ao estado 66 - comando_composto go to state 44 - comando_sem_rotulo go to state 98 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 +Estado 73 -state 75 + 72 cond_else: ELSE • comando_sem_rotulo - 68 comando_condicional: if_then cond_else . + 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 - $default reduce using rule 68 (comando_condicional) + $padrão reduzir usando a regra 68 ($@10) + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 100 + 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 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 -state 76 - 16 declara_var: @5 lista_id_var DOIS_PONTOS tipo @6 . PONTO_E_VIRGULA +Estado 74 - PONTO_E_VIRGULA shift, and go to state 99 + 71 comando_condicional: if_then cond_else • + $padrão reduzir usando a regra 71 (comando_condicional) -state 77 - 25 declaracao_procedimento: PROCEDURE IDENT @7 PONTO_E_VIRGULA bloco . +Estado 75 - $default reduce using rule 25 (declaracao_procedimento) + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA + PONTO_E_VIRGULA deslocar, e ir ao estado 101 -state 78 - 61 atribuicao: IDENT @8 ATRIBUICAO . expressao_simples +Estado 76 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + 25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco • - expressao_simples go to state 100 - termo go to state 66 - fator go to state 67 + $padrão reduzir usando a regra 25 (declaracao_procedimento) -state 79 +Estado 77 - 47 expressao: expressao IGUAL . expressao_simples + 39 atribuicao_ou_procedimento: IDENT $@8 atribuicao_ou_procedimento_token • - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + $padrão reduzir usando a regra 39 (atribuicao_ou_procedimento) - expressao_simples go to state 101 - termo go to state 66 - fator go to state 67 +Estado 78 -state 80 + 40 atribuicao_ou_procedimento_token: atribuicao • - 48 expressao: expressao DIFERENTE . expressao_simples + $padrão reduzir usando a regra 40 (atribuicao_ou_procedimento_token) - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 - expressao_simples go to state 102 - termo go to state 66 - fator go to state 67 +Estado 79 + 43 atribuicao: $@9 • ATRIBUICAO expressao_simples -state 81 + ATRIBUICAO deslocar, e ir ao estado 102 - 50 expressao: expressao MENOR_IGUAL . expressao_simples - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 +Estado 80 - expressao_simples go to state 103 - termo go to state 66 - fator go to state 67 + 41 atribuicao_ou_procedimento_token: chamada_procedimento • + $padrão reduzir usando a regra 41 (atribuicao_ou_procedimento_token) -state 82 - 52 expressao: expressao MAIOR_IGUAL . expressao_simples +Estado 81 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + 52 expressao: expressao IGUAL • expressao_simples - expressao_simples go to state 104 - termo go to state 66 - fator go to state 67 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + expressao_simples ir ao estado 103 + termo ir ao estado 65 + fator ir ao estado 66 -state 83 - 49 expressao: expressao MENOR . expressao_simples +Estado 82 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + 53 expressao: expressao DIFERENTE • expressao_simples - expressao_simples go to state 105 - termo go to state 66 - fator go to state 67 + 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 -state 84 - 51 expressao: expressao MAIOR . expressao_simples +Estado 83 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + 55 expressao: expressao MENOR_IGUAL • expressao_simples - expressao_simples go to state 106 - termo go to state 66 - fator go to state 67 + 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 -state 85 - 72 if_then: IF expressao @11 . THEN comando_sem_rotulo +Estado 84 - THEN shift, and go to state 107 + 57 expressao: expressao MAIOR_IGUAL • expressao_simples + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 -state 86 + expressao_simples ir ao estado 106 + termo ir ao estado 65 + fator ir ao estado 66 - 54 expressao_simples: expressao_simples MAIS . termo - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 +Estado 85 - termo go to state 108 - fator go to state 67 + 54 expressao: expressao MENOR • expressao_simples + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 -state 87 + expressao_simples ir ao estado 107 + termo ir ao estado 65 + fator ir ao estado 66 - 55 expressao_simples: expressao_simples MENOS . termo - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 +Estado 86 - termo go to state 109 - fator go to state 67 + 56 expressao: expressao MAIOR • expressao_simples + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 -state 88 + expressao_simples ir ao estado 108 + termo ir ao estado 65 + fator ir ao estado 66 - 58 termo: termo DIV . fator - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 +Estado 87 - fator go to state 110 + 75 if_then: IF expressao $@12 • THEN comando_sem_rotulo + THEN deslocar, e ir ao estado 109 -state 89 - 57 termo: termo ASTERISCO . fator +Estado 88 - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 + 59 expressao_simples: expressao_simples MAIS • termo - fator go to state 111 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + termo ir ao estado 110 + fator ir ao estado 66 -state 90 - 43 simb_leitura: IDENT . +Estado 89 - $default reduce using rule 43 (simb_leitura) + 60 expressao_simples: expressao_simples MENOS • termo + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 -state 91 + termo ir ao estado 111 + fator ir ao estado 66 - 40 leitura: READ ABRE_PARENTESES lista_leituras . FECHA_PARENTESES - 41 lista_leituras: lista_leituras . VIRGULA simb_leitura - FECHA_PARENTESES shift, and go to state 112 - VIRGULA shift, and go to state 113 +Estado 90 + 63 termo: termo DIV • fator -state 92 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - 42 lista_leituras: simb_leitura . + fator ir ao estado 112 - $default reduce using rule 42 (lista_leituras) +Estado 91 -state 93 + 62 termo: termo ASTERISCO • fator - 44 escrita: WRITE ABRE_PARENTESES lista_escritas . FECHA_PARENTESES - 45 lista_escritas: lista_escritas . VIRGULA expressao_simples + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - FECHA_PARENTESES shift, and go to state 114 - VIRGULA shift, and go to state 115 + fator ir ao estado 113 -state 94 +Estado 92 - 46 lista_escritas: expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo + 48 simb_leitura: IDENT • - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + $padrão reduzir usando a regra 48 (simb_leitura) - $default reduce using rule 46 (lista_escritas) +Estado 93 -state 95 + 45 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES + 46 lista_leituras: lista_leituras • VIRGULA simb_leitura - 27 comandos: comando PONTO_E_VIRGULA comandos . + FECHA_PARENTESES deslocar, e ir ao estado 114 + VIRGULA deslocar, e ir ao estado 115 - $default reduce using rule 27 (comandos) +Estado 94 -state 96 + 47 lista_leituras: simb_leitura • - 30 comando: numero DOIS_PONTOS comando_sem_rotulo . + $padrão reduzir usando a regra 47 (lista_leituras) - $default reduce using rule 30 (comando) +Estado 95 -state 97 + 49 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES + 50 lista_escritas: lista_escritas • VIRGULA expressao_simples - 47 expressao: expressao . IGUAL expressao_simples - 48 | expressao . DIFERENTE expressao_simples - 49 | expressao . MENOR expressao_simples - 50 | expressao . MENOR_IGUAL expressao_simples - 51 | expressao . MAIOR expressao_simples - 52 | expressao . MAIOR_IGUAL expressao_simples - 67 comando_repetitivo: @9 WHILE expressao . DO @10 comando_sem_rotulo + FECHA_PARENTESES deslocar, e ir ao estado 116 + VIRGULA deslocar, e ir ao estado 117 - DO shift, and go to state 116 - IGUAL shift, and go to state 79 - DIFERENTE shift, and go to state 80 - MENOR_IGUAL shift, and go to state 81 - MAIOR_IGUAL shift, and go to state 82 - MENOR shift, and go to state 83 - MAIOR shift, and go to state 84 +Estado 96 -state 98 + 51 lista_escritas: expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - 69 cond_else: ELSE comando_sem_rotulo . + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 - $default reduce using rule 69 (cond_else) + $padrão reduzir usando a regra 51 (lista_escritas) -state 99 +Estado 97 - 16 declara_var: @5 lista_id_var DOIS_PONTOS tipo @6 PONTO_E_VIRGULA . + 27 comandos: comando PONTO_E_VIRGULA comandos • - $default reduce using rule 16 (declara_var) + $padrão reduzir usando a regra 27 (comandos) -state 100 +Estado 98 - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo - 61 atribuicao: IDENT @8 ATRIBUICAO expressao_simples . + 30 comando: numero DOIS_PONTOS comando_sem_rotulo • - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + $padrão reduzir usando a regra 30 (comando) - $default reduce using rule 61 (atribuicao) +Estado 99 -state 101 + 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 - 47 expressao: expressao IGUAL expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo + 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 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 - $default reduce using rule 47 (expressao) +Estado 100 + 72 cond_else: ELSE comando_sem_rotulo • -state 102 + $padrão reduzir usando a regra 72 (cond_else) - 48 expressao: expressao DIFERENTE expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 +Estado 101 - $default reduce using rule 48 (expressao) + 16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA • + $padrão reduzir usando a regra 16 (declara_var) -state 103 - 50 expressao: expressao MENOR_IGUAL expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo +Estado 102 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + 43 atribuicao: $@9 ATRIBUICAO • expressao_simples - $default reduce using rule 50 (expressao) + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 + expressao_simples ir ao estado 119 + termo ir ao estado 65 + fator ir ao estado 66 -state 104 - 52 expressao: expressao MAIOR_IGUAL expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo +Estado 103 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + 52 expressao: expressao IGUAL expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - $default reduce using rule 52 (expressao) + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 52 (expressao) -state 105 - 49 expressao: expressao MENOR expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo +Estado 104 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + 53 expressao: expressao DIFERENTE expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - $default reduce using rule 49 (expressao) + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 53 (expressao) -state 106 - 51 expressao: expressao MAIOR expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo +Estado 105 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 + 55 expressao: expressao MENOR_IGUAL expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - $default reduce using rule 51 (expressao) + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 + $padrão reduzir usando a regra 55 (expressao) -state 107 - 72 if_then: IF expressao @11 THEN . comando_sem_rotulo +Estado 106 - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - READ shift, and go to state 42 - WRITE shift, and go to state 43 + 57 expressao: expressao MAIOR_IGUAL expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - WHILE reduce using rule 65 (@9) - $default reduce using rule 39 (chamada_procedimento) + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 - comando_composto go to state 44 - comando_sem_rotulo go to state 117 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 + $padrão reduzir usando a regra 57 (expressao) -state 108 +Estado 107 - 54 expressao_simples: expressao_simples MAIS termo . - 57 termo: termo . ASTERISCO fator - 58 | termo . DIV fator + 54 expressao: expressao MENOR expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - DIV shift, and go to state 88 - ASTERISCO shift, and go to state 89 + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 - $default reduce using rule 54 (expressao_simples) + $padrão reduzir usando a regra 54 (expressao) -state 109 +Estado 108 - 55 expressao_simples: expressao_simples MENOS termo . - 57 termo: termo . ASTERISCO fator - 58 | termo . DIV fator + 56 expressao: expressao MAIOR expressao_simples • + 59 expressao_simples: expressao_simples • MAIS termo + 60 | expressao_simples • MENOS termo - DIV shift, and go to state 88 - ASTERISCO shift, and go to state 89 + MAIS deslocar, e ir ao estado 88 + MENOS deslocar, e ir ao estado 89 - $default reduce using rule 55 (expressao_simples) + $padrão reduzir usando a regra 56 (expressao) -state 110 +Estado 109 - 58 termo: termo DIV fator . + 75 if_then: IF expressao $@12 THEN • comando_sem_rotulo - $default reduce using rule 58 (termo) + 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 68 ($@10) -state 111 + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 120 + 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 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 - 57 termo: termo ASTERISCO fator . - $default reduce using rule 57 (termo) +Estado 110 + 59 expressao_simples: expressao_simples MAIS termo • + 62 termo: termo • ASTERISCO fator + 63 | termo • DIV fator -state 112 + DIV deslocar, e ir ao estado 90 + ASTERISCO deslocar, e ir ao estado 91 - 40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES . + $padrão reduzir usando a regra 59 (expressao_simples) - $default reduce using rule 40 (leitura) +Estado 111 -state 113 + 60 expressao_simples: expressao_simples MENOS termo • + 62 termo: termo • ASTERISCO fator + 63 | termo • DIV fator - 41 lista_leituras: lista_leituras VIRGULA . simb_leitura + DIV deslocar, e ir ao estado 90 + ASTERISCO deslocar, e ir ao estado 91 - IDENT shift, and go to state 90 + $padrão reduzir usando a regra 60 (expressao_simples) - simb_leitura go to state 118 +Estado 112 -state 114 + 63 termo: termo DIV fator • - 44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES . + $padrão reduzir usando a regra 63 (termo) - $default reduce using rule 44 (escrita) +Estado 113 -state 115 + 62 termo: termo ASTERISCO fator • - 45 lista_escritas: lista_escritas VIRGULA . expressao_simples + $padrão reduzir usando a regra 62 (termo) - IDENT shift, and go to state 62 - NUMERO shift, and go to state 63 - expressao_simples go to state 119 - termo go to state 66 - fator go to state 67 +Estado 114 + 45 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES • -state 116 + $padrão reduzir usando a regra 45 (leitura) - 67 comando_repetitivo: @9 WHILE expressao DO . @10 comando_sem_rotulo - $default reduce using rule 66 (@10) +Estado 115 - @10 go to state 120 + 46 lista_leituras: lista_leituras VIRGULA • simb_leitura + IDENT deslocar, e ir ao estado 92 -state 117 + simb_leitura ir ao estado 121 - 72 if_then: IF expressao @11 THEN comando_sem_rotulo . - $default reduce using rule 72 (if_then) +Estado 116 + 49 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES • -state 118 + $padrão reduzir usando a regra 49 (escrita) - 41 lista_leituras: lista_leituras VIRGULA simb_leitura . - $default reduce using rule 41 (lista_leituras) +Estado 117 + 50 lista_escritas: lista_escritas VIRGULA • expressao_simples -state 119 + IDENT deslocar, e ir ao estado 61 + NUMERO deslocar, e ir ao estado 62 - 45 lista_escritas: lista_escritas VIRGULA expressao_simples . - 54 expressao_simples: expressao_simples . MAIS termo - 55 | expressao_simples . MENOS termo + expressao_simples ir ao estado 122 + termo ir ao estado 65 + fator ir ao estado 66 - MAIS shift, and go to state 86 - MENOS shift, and go to state 87 - $default reduce using rule 45 (lista_escritas) +Estado 118 + 70 comando_repetitivo: $@10 WHILE expressao DO • $@11 comando_sem_rotulo -state 120 + $padrão reduzir usando a regra 69 ($@11) - 67 comando_repetitivo: @9 WHILE expressao DO @10 . comando_sem_rotulo + $@11 ir ao estado 123 - T_BEGIN shift, and go to state 34 - IDENT shift, and go to state 39 - IF shift, and go to state 40 - READ shift, and go to state 42 - WRITE shift, and go to state 43 - WHILE reduce using rule 65 (@9) - $default reduce using rule 39 (chamada_procedimento) +Estado 119 - comando_composto go to state 44 - comando_sem_rotulo go to state 121 - chamada_procedimento go to state 48 - leitura go to state 49 - escrita go to state 50 - atribuicao go to state 51 - comando_repetitivo go to state 53 - @9 go to state 54 - comando_condicional go to state 55 - if_then go to state 56 + 43 atribuicao: $@9 ATRIBUICAO 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 -state 121 + $padrão reduzir usando a regra 43 (atribuicao) - 67 comando_repetitivo: @9 WHILE expressao DO @10 comando_sem_rotulo . - $default reduce using rule 67 (comando_repetitivo) +Estado 120 + + 75 if_then: IF expressao $@12 THEN comando_sem_rotulo • + + $padrão reduzir usando a regra 75 (if_then) + + +Estado 121 + + 46 lista_leituras: lista_leituras VIRGULA simb_leitura • + + $padrão reduzir usando a regra 46 (lista_leituras) + + +Estado 122 + + 50 lista_escritas: lista_escritas VIRGULA 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 + + $padrão reduzir usando a regra 50 (lista_escritas) + + +Estado 123 + + 70 comando_repetitivo: $@10 WHILE expressao DO $@11 • 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 68 ($@10) + + comando_composto ir ao estado 44 + comando_sem_rotulo ir ao estado 124 + 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 + comando_condicional ir ao estado 54 + if_then ir ao estado 55 + + +Estado 124 + + 70 comando_repetitivo: $@10 WHILE expressao DO $@11 comando_sem_rotulo • + + $padrão reduzir usando a regra 70 (comando_repetitivo) diff --git a/compilador.y b/compilador.y index f145d6c473dc4306da3d139c5cb4189ee85641a8..e10c0ea7078f81344faf7d5b0b1cc1543566e4f2 100644 --- a/compilador.y +++ b/compilador.y @@ -161,7 +161,7 @@ declaracao_procedimento: PROCEDURE IDENT { char r_proc[4]; sprintf(r_proc, "R%02d", rot_id); rot_id += 1; - info.pr.rot = r_proc; + strcpy(info.pr.rot,r_proc); info.pr.quant = 0; info.pr.param = NULL; @@ -196,27 +196,49 @@ comando: numero DOIS_PONTOS comando_sem_rotulo | comando_sem_rotulo ; -comando_sem_rotulo: atribuicao +comando_sem_rotulo: atribuicao_ou_procedimento | comando_composto | comando_condicional | comando_repetitivo | leitura | escrita +; + +atribuicao_ou_procedimento: IDENT {l_elem = busca(token, ts);} + atribuicao_ou_procedimento_token +; + +atribuicao_ou_procedimento_token: atribuicao | chamada_procedimento ; -chamada_procedimento: /*IDENT { - l_elem = busca(token,ts); +atribuicao: { + if (l_elem == NULL) { + yyerror("Variável de destino não declarada"); + } else { + destino_nivel = l_elem->nivel; + destino_desloc = l_elem->info.vs.desloc; + } +} ATRIBUICAO expressao_simples { + // Gera código ARMZ para armazenar valor + char buffer[50]; + sprintf(buffer, "ARMZ %d,%d", destino_nivel, destino_desloc); + geraCodigo(NULL, buffer); +}; + + +chamada_procedimento: { if (l_elem == NULL || l_elem->categ != PR) { yyerror("Procedimento não declarado"); } else { // Gera código para chamar o procedimento char buffer[50]; + mostra_ts(ts); sprintf(buffer, "CHPR %s,%d", l_elem->info.pr.rot, nivel_lexico); geraCodigo(NULL, buffer); } - //ABRE_PARENTESES FECHA_PARENTESES - }*/ + + } ; leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES @@ -285,24 +307,6 @@ termo: termo ASTERISCO fator { | fator ; -atribuicao: IDENT { - mostra_ts(ts); - // Busca variável no lado esquerdo - l_elem = busca(token, ts); - if (l_elem == NULL) { - yyerror("Variável de destino não declarada"); - } else { - destino_nivel = l_elem->nivel; - destino_desloc = l_elem->info.vs.desloc; - } -} ATRIBUICAO expressao_simples { - // Gera código ARMZ para armazenar valor - char buffer[50]; - sprintf(buffer, "ARMZ %d,%d", destino_nivel, destino_desloc); - geraCodigo(NULL, buffer); -}; - - fator: IDENT { // Carrega variável l_elem = busca(token, ts); diff --git a/teste6.pas b/teste6.pas index cb2699e92f28899a2dd4c63ca01f5c6d6c8e90b3..05af5dae03af5c19b09039427ca1f09d3bbf9b4a 100644 --- a/teste6.pas +++ b/teste6.pas @@ -7,5 +7,5 @@ program proc1 (input, output); end begin x := 8; - p + p; end. \ No newline at end of file diff --git a/ts/ts.c b/ts/ts.c index 2fed12532577cdd00c3fada41ea86385cf76a983..6eda21d93dab06ccd90d3a34d9c390a112c6222f 100644 --- a/ts/ts.c +++ b/ts/ts.c @@ -20,7 +20,7 @@ void insere_ts(char *ident, int categ, int nivel, info_t info, ts_t *ts){ new->info.vs.tipo = info.vs.tipo; new->info.vs.desloc = info.vs.desloc; } else if (categ == PR) { - new->info.pr.rot = info.pr.rot; + strcpy(new->info.pr.rot, info.pr.rot); new->info.pr.quant = info.pr.quant; new->info.pr.param = (int **)malloc(info.pr.quant * sizeof(int *)); for (int i = 0; i < info.pr.quant; i++) { diff --git a/ts/ts.h b/ts/ts.h index 7db1cecc1865709198df406560881480b35c0d57..02271bda8a8c386855be831f2dea37c720ca53f0 100644 --- a/ts/ts.h +++ b/ts/ts.h @@ -7,7 +7,7 @@ typedef struct vs_t { } vs_t; typedef struct pr_t { - char *rot; + char rot[4]; int quant; int **param; } pr_t;