From dc1c13f64f5682280538a2ffc0290518ba6814a6 Mon Sep 17 00:00:00 2001
From: Henrique Margotte <henriquemargotte@gmail.com>
Date: Sat, 30 Nov 2024 20:19:01 -0300
Subject: [PATCH] declara procedimento

---
 MEPA              |   56 +-
 compilador        |  Bin 41384 -> 45480 bytes
 compilador.output | 1450 +++++++++++++++++++++++----------------------
 compilador.tab.c  |  522 +++++++++-------
 compilador.y      |   41 +-
 teste6.pas        |    5 +
 6 files changed, 1104 insertions(+), 970 deletions(-)

diff --git a/MEPA b/MEPA
index dd41d3f..4c145d8 100644
--- a/MEPA
+++ b/MEPA
@@ -1,49 +1,15 @@
      INPP
-     AMEM 2
-     LEIT
-     ARMZ 0,1
-     CRCT 0
-     ARMZ 0,0
-R00: NADA 
-     CRVL 0,0
-     CRVL 0,1
-     CMME
-     DSVF R01
-     CRVL 0,0
-     CRCT 2
-     DIVI
-     CRCT 2
-     MULT
-     CRVL 0,0
-     CMIG
-     DSVF R02
-     CRVL 0,0
-     IMPR
-     CRCT 0
-     IMPR
-     CRVL 0,0
-     CRCT 0
-     CMIG
-     DSVF R04
-     CRCT 2
-     IMPR
-     DSVS R05
-R04: NADA 
-     CRCT 3
-     IMPR
-R05: NADA 
-     DSVS R03
-R02: NADA 
-     CRVL 0,0
-     IMPR
-     CRCT 1
-     IMPR
-R03: NADA 
-     CRVL 0,0
-     CRCT 1
-     SOMA
-     ARMZ 0,0
+     AMEM 1
      DSVS R00
-R01: NADA 
+R01: ENPR 1 
+     AMEM 1
+     DSVS R02
+R02: NADA 
+     CRCT 3
+     ARMZ 1,1
      DMEM 2
+R00: NADA 
+     CRCT 8
+     ARMZ 0,0
+     DMEM 0
      PARA
diff --git a/compilador b/compilador
index dec53b9f92a3cf7349e7606481764fe2e37bab4f..fc42e009c85e53b9b110f44d7c8229b032d97328 100755
GIT binary patch
delta 14630
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
QwC7v_k(6Sb>@`ac0Au247XSbN

delta 14135
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
Cz9~Ea

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