From 274cf721b36c0b3b8bfd2cbbb5a2366e7444137f Mon Sep 17 00:00:00 2001
From: Henrique Margotte <henriquemargotte@gmail.com>
Date: Sun, 1 Dec 2024 12:32:01 -0300
Subject: [PATCH] parametros criados, mas deslocamento nao atualizado

---
 MEPA              |    3 +-
 compilador.output | 1246 +++++++++++++++++++++++++--------------------
 compilador.y      |   17 +-
 teste7.pas        |   10 +
 4 files changed, 729 insertions(+), 547 deletions(-)
 create mode 100644 teste7.pas

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