From 165feb6d59260bafbe6fbad15ccb7114ecebd92e Mon Sep 17 00:00:00 2001
From: Henrique Margotte <henriquemargotte@gmail.com>
Date: Sat, 30 Nov 2024 20:54:52 -0300
Subject: [PATCH] problemas chamada procedimento

---
 MEPA              |   18 +-
 compilador        |  Bin 45480 -> 45512 bytes
 compilador.output | 1011 +++++++++++++++++++++++----------------------
 compilador.tab.c  |  388 ++++++++---------
 compilador.y      |   21 +-
 teste2.pas        |    2 +-
 teste6.pas        |    1 +
 ts/ts.c           |   56 ++-
 ts/ts.h           |    2 +-
 ts/ts.o           |  Bin 3216 -> 5176 bytes
 10 files changed, 776 insertions(+), 723 deletions(-)

diff --git a/MEPA b/MEPA
index 4c145d8..94c8cc4 100644
--- a/MEPA
+++ b/MEPA
@@ -1,15 +1,15 @@
      INPP
      AMEM 1
-     DSVS R00
-R01: ENPR 1 
      AMEM 1
-     DSVS R02
-R02: NADA 
-     CRCT 3
-     ARMZ 1,1
-     DMEM 2
+     DSVS R00
 R00: NADA 
-     CRCT 8
+     CRCT 5
      ARMZ 0,0
-     DMEM 0
+     CRVL 0,1
+     CRCT 5
+     CRCT 2
+     MULT
+     SOMA
+     ARMZ 0,1
+     DMEM 2
      PARA
diff --git a/compilador b/compilador
index fc42e009c85e53b9b110f44d7c8229b032d97328..66d4937bcc57708d219cd2e69fa3fca1f4554c37 100755
GIT binary patch
delta 7821
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

delta 6813
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
VnsWv~ZLFG{xzU{Q)Z~R5)d9_wdo=(6

diff --git a/compilador.output b/compilador.output
index 903e78d..37a9853 100644
--- a/compilador.output
+++ b/compilador.output
@@ -9,7 +9,7 @@ Terminais sem uso na gramática
     NOT
 
 
-Estado 70 conflitos: 1 de redução/redução
+Estado 71 conflitos: 1 de redução/redução
 
 
 Gramática
@@ -75,58 +75,61 @@ Gramática
    35                   | comando_repetitivo
    36                   | leitura
    37                   | escrita
+   38                   | chamada_procedimento
 
-   38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
+   39 chamada_procedimento: ε
 
-   39 lista_leituras: lista_leituras VIRGULA simb_leitura
-   40               | simb_leitura
+   40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
 
-   41 simb_leitura: IDENT
+   41 lista_leituras: lista_leituras VIRGULA simb_leitura
+   42               | simb_leitura
 
-   42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES
+   43 simb_leitura: IDENT
 
-   43 lista_escritas: lista_escritas VIRGULA expressao_simples
-   44               | expressao_simples
+   44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES
 
-   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
+   45 lista_escritas: lista_escritas VIRGULA expressao_simples
+   46               | expressao_simples
 
-   52 expressao_simples: expressao_simples MAIS termo
-   53                  | expressao_simples MENOS termo
-   54                  | termo
+   47 expressao: expressao IGUAL expressao_simples
+   48          | expressao DIFERENTE expressao_simples
+   49          | expressao MENOR expressao_simples
+   50          | expressao MENOR_IGUAL expressao_simples
+   51          | expressao MAIOR expressao_simples
+   52          | expressao MAIOR_IGUAL expressao_simples
+   53          | expressao_simples
 
-   55 termo: termo ASTERISCO fator
-   56      | termo DIV fator
-   57      | fator
+   54 expressao_simples: expressao_simples MAIS termo
+   55                  | expressao_simples MENOS termo
+   56                  | termo
 
-   58 $@8: ε
+   57 termo: termo ASTERISCO fator
+   58      | termo DIV fator
+   59      | fator
 
-   59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples
+   60 $@8: ε
 
-   60 fator: IDENT
-   61      | NUMERO
+   61 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples
 
-   62 numero: NUMERO
+   62 fator: IDENT
+   63      | NUMERO
 
-   63 $@9: ε
+   64 numero: NUMERO
 
-   64 $@10: ε
+   65 $@9: ε
 
-   65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo
+   66 $@10: ε
 
-   66 comando_condicional: if_then cond_else
+   67 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo
 
-   67 cond_else: ELSE comando_sem_rotulo
-   68          | ε
+   68 comando_condicional: if_then cond_else
 
-   69 $@11: ε
+   69 cond_else: ELSE comando_sem_rotulo
+   70          | ε
 
-   70 if_then: IF expressao $@11 THEN comando_sem_rotulo
+   71 $@11: ε
+
+   72 if_then: IF expressao $@11 THEN comando_sem_rotulo
 
 
 Terminais, com as regras onde eles aparecem
@@ -134,44 +137,44 @@ Terminais, com as regras onde eles aparecem
     $end (0) 0
     error (256)
     PROGRAM (258) 2
-    ABRE_PARENTESES (259) 2 38 42
-    FECHA_PARENTESES (260) 2 38 42
-    VIRGULA (261) 6 18 20 39 43
+    ABRE_PARENTESES (259) 2 40 44
+    FECHA_PARENTESES (260) 2 40 44
+    VIRGULA (261) 6 18 20 41 45
     PONTO_E_VIRGULA (262) 2 16 25 27 28
     DOIS_PONTOS (263) 16 30
     PONTO (264) 2
     T_BEGIN (265) 26
     T_END (266) 26
     VAR (267) 10
-    IDENT (268) 2 17 18 19 20 21 25 41 59 60
-    ATRIBUICAO (269) 59
+    IDENT (268) 2 17 18 19 20 21 25 43 61 62
+    ATRIBUICAO (269) 61
     LABEL (270) 6
     TYPE (271)
     ARRAY (272)
     PROCEDURE (273) 25
     FUNCTION (274)
     GOTO (275)
-    IF (276) 70
-    THEN (277) 70
-    ELSE (278) 67
-    WHILE (279) 65
-    DO (280) 65
+    IF (276) 72
+    THEN (277) 72
+    ELSE (278) 69
+    WHILE (279) 67
+    DO (280) 67
     OR (281)
-    DIV (282) 56
+    DIV (282) 58
     AND (283)
     NOT (284)
-    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
+    IGUAL (285) 47
+    DIFERENTE (286) 48
+    MENOR_IGUAL (287) 50
+    MAIOR_IGUAL (288) 52
+    MENOR (289) 49
+    MAIOR (290) 51
+    MAIS (291) 54
+    MENOS (292) 55
+    ASTERISCO (293) 57
+    NUMERO (294) 63 64
+    READ (295) 40
+    WRITE (296) 44
     LOWER_THAN_ELSE (297)
 
 
@@ -246,65 +249,68 @@ Não terminais com as regras onde eles aparecem
         à 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
+        à esquerda: 32 33 34 35 36 37 38
+        à direita: 30 31 67 69 72
+    chamada_procedimento (67)
+        à esquerda: 39
+        à direita: 38
+    leitura (68)
+        à esquerda: 40
         à direita: 36
-    lista_leituras (68)
-        à esquerda: 39 40
-        à direita: 38 39
-    simb_leitura (69)
-        à esquerda: 41
-        à direita: 39 40
-    escrita (70)
-        à esquerda: 42
+    lista_leituras (69)
+        à esquerda: 41 42
+        à direita: 40 41
+    simb_leitura (70)
+        à esquerda: 43
+        à direita: 41 42
+    escrita (71)
+        à esquerda: 44
         à 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: 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
+    lista_escritas (72)
+        à esquerda: 45 46
+        à direita: 44 45
+    expressao (73)
+        à esquerda: 47 48 49 50 51 52 53
+        à direita: 47 48 49 50 51 52 67 72
+    expressao_simples (74)
+        à esquerda: 54 55 56
+        à direita: 45 46 47 48 49 50 51 52 53 54 55 61
+    termo (75)
+        à esquerda: 57 58 59
+        à direita: 54 55 56 57 58
+    atribuicao (76)
+        à esquerda: 61
         à direita: 32
-    $@8 (76)
-        à esquerda: 58
-        à direita: 59
-    fator (77)
-        à esquerda: 60 61
-        à direita: 55 56 57
-    numero (78)
-        à esquerda: 62
+    $@8 (77)
+        à esquerda: 60
+        à direita: 61
+    fator (78)
+        à esquerda: 62 63
+        à direita: 57 58 59
+    numero (79)
+        à esquerda: 64
         à direita: 30
-    comando_repetitivo (79)
-        à esquerda: 65
+    comando_repetitivo (80)
+        à esquerda: 67
         à direita: 35
-    $@9 (80)
-        à esquerda: 63
-        à direita: 65
-    $@10 (81)
-        à esquerda: 64
-        à direita: 65
-    comando_condicional (82)
+    $@9 (81)
+        à esquerda: 65
+        à direita: 67
+    $@10 (82)
         à esquerda: 66
+        à direita: 67
+    comando_condicional (83)
+        à esquerda: 68
         à direita: 34
-    cond_else (83)
-        à esquerda: 67 68
-        à direita: 66
-    if_then (84)
-        à esquerda: 70
-        à direita: 66
-    $@11 (85)
-        à esquerda: 69
-        à direita: 70
+    cond_else (84)
+        à esquerda: 69 70
+        à direita: 68
+    if_then (85)
+        à esquerda: 72
+        à direita: 68
+    $@11 (86)
+        à esquerda: 71
+        à direita: 72
 
 
 Estado 0
@@ -600,21 +606,23 @@ Estado 34
     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
+    PONTO_E_VIRGULA  reduzir usando a regra 39 (chamada_procedimento)
+    WHILE            reduzir usando a regra 65 ($@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
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    numero                ir ao estado 52
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
 Estado 35
@@ -628,66 +636,66 @@ Estado 36
 
    18 lista_id_var: lista_id_var VIRGULA • IDENT
 
-    IDENT  deslocar, e ir ao estado 56
+    IDENT  deslocar, e ir ao estado 57
 
 
 Estado 37
 
    16 declara_var: $@5 lista_id_var DOIS_PONTOS • tipo $@6 PONTO_E_VIRGULA
 
-    IDENT  deslocar, e ir ao estado 57
+    IDENT  deslocar, e ir ao estado 58
 
-    tipo  ir ao estado 58
+    tipo  ir ao estado 59
 
 
 Estado 38
 
    25 declaracao_procedimento: PROCEDURE IDENT $@7 • PONTO_E_VIRGULA bloco
 
-    PONTO_E_VIRGULA  deslocar, e ir ao estado 59
+    PONTO_E_VIRGULA  deslocar, e ir ao estado 60
 
 
 Estado 39
 
-   59 atribuicao: IDENT • $@8 ATRIBUICAO expressao_simples
+   61 atribuicao: IDENT • $@8 ATRIBUICAO expressao_simples
 
-    $padrão  reduzir usando a regra 58 ($@8)
+    $padrão  reduzir usando a regra 60 ($@8)
 
-    $@8  ir ao estado 60
+    $@8  ir ao estado 61
 
 
 Estado 40
 
-   70 if_then: IF • expressao $@11 THEN comando_sem_rotulo
+   72 if_then: IF • expressao $@11 THEN comando_sem_rotulo
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
-    expressao          ir ao estado 63
-    expressao_simples  ir ao estado 64
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    expressao          ir ao estado 64
+    expressao_simples  ir ao estado 65
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 41
 
-   62 numero: NUMERO •
+   64 numero: NUMERO •
 
-    $padrão  reduzir usando a regra 62 (numero)
+    $padrão  reduzir usando a regra 64 (numero)
 
 
 Estado 42
 
-   38 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES
+   40 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES
 
-    ABRE_PARENTESES  deslocar, e ir ao estado 67
+    ABRE_PARENTESES  deslocar, e ir ao estado 68
 
 
 Estado 43
 
-   42 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES
+   44 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES
 
-    ABRE_PARENTESES  deslocar, e ir ao estado 68
+    ABRE_PARENTESES  deslocar, e ir ao estado 69
 
 
 Estado 44
@@ -701,7 +709,7 @@ Estado 45
 
    26 comando_composto: T_BEGIN comandos • T_END
 
-    T_END  deslocar, e ir ao estado 69
+    T_END  deslocar, e ir ao estado 70
 
 
 Estado 46
@@ -709,7 +717,7 @@ Estado 46
    27 comandos: comando • PONTO_E_VIRGULA comandos
    28         | comando • PONTO_E_VIRGULA
 
-    PONTO_E_VIRGULA  deslocar, e ir ao estado 70
+    PONTO_E_VIRGULA  deslocar, e ir ao estado 71
 
 
 Estado 47
@@ -721,88 +729,95 @@ Estado 47
 
 Estado 48
 
+   38 comando_sem_rotulo: chamada_procedimento •
+
+    $padrão  reduzir usando a regra 38 (comando_sem_rotulo)
+
+
+Estado 49
+
    36 comando_sem_rotulo: leitura •
 
     $padrão  reduzir usando a regra 36 (comando_sem_rotulo)
 
 
-Estado 49
+Estado 50
 
    37 comando_sem_rotulo: escrita •
 
     $padrão  reduzir usando a regra 37 (comando_sem_rotulo)
 
 
-Estado 50
+Estado 51
 
    32 comando_sem_rotulo: atribuicao •
 
     $padrão  reduzir usando a regra 32 (comando_sem_rotulo)
 
 
-Estado 51
+Estado 52
 
    30 comando: numero • DOIS_PONTOS comando_sem_rotulo
 
-    DOIS_PONTOS  deslocar, e ir ao estado 71
+    DOIS_PONTOS  deslocar, e ir ao estado 72
 
 
-Estado 52
+Estado 53
 
    35 comando_sem_rotulo: comando_repetitivo •
 
     $padrão  reduzir usando a regra 35 (comando_sem_rotulo)
 
 
-Estado 53
+Estado 54
 
-   65 comando_repetitivo: $@9 • WHILE expressao DO $@10 comando_sem_rotulo
+   67 comando_repetitivo: $@9 • WHILE expressao DO $@10 comando_sem_rotulo
 
-    WHILE  deslocar, e ir ao estado 72
+    WHILE  deslocar, e ir ao estado 73
 
 
-Estado 54
+Estado 55
 
    34 comando_sem_rotulo: comando_condicional •
 
     $padrão  reduzir usando a regra 34 (comando_sem_rotulo)
 
 
-Estado 55
+Estado 56
 
-   66 comando_condicional: if_then • cond_else
+   68 comando_condicional: if_then • cond_else
 
-    ELSE  deslocar, e ir ao estado 73
+    ELSE  deslocar, e ir ao estado 74
 
-    $padrão  reduzir usando a regra 68 (cond_else)
+    $padrão  reduzir usando a regra 70 (cond_else)
 
-    cond_else  ir ao estado 74
+    cond_else  ir ao estado 75
 
 
-Estado 56
+Estado 57
 
    18 lista_id_var: lista_id_var VIRGULA IDENT •
 
     $padrão  reduzir usando a regra 18 (lista_id_var)
 
 
-Estado 57
+Estado 58
 
    17 tipo: IDENT •
 
     $padrão  reduzir usando a regra 17 (tipo)
 
 
-Estado 58
+Estado 59
 
    16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo • $@6 PONTO_E_VIRGULA
 
     $padrão  reduzir usando a regra 15 ($@6)
 
-    $@6  ir ao estado 75
+    $@6  ir ao estado 76
 
 
-Estado 59
+Estado 60
 
    25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA • bloco
 
@@ -810,115 +825,115 @@ Estado 59
 
     $padrão  reduzir usando a regra 7 (parte_declara_rotulos)
 
-    bloco                  ir ao estado 76
+    bloco                  ir ao estado 77
     parte_declara_rotulos  ir ao estado 15
 
 
-Estado 60
-
-   59 atribuicao: IDENT $@8 • ATRIBUICAO expressao_simples
-
-    ATRIBUICAO  deslocar, e ir ao estado 77
-
-
 Estado 61
 
-   60 fator: IDENT •
+   61 atribuicao: IDENT $@8 • ATRIBUICAO expressao_simples
 
-    $padrão  reduzir usando a regra 60 (fator)
+    ATRIBUICAO  deslocar, e ir ao estado 78
 
 
 Estado 62
 
-   61 fator: NUMERO •
+   62 fator: IDENT •
 
-    $padrão  reduzir usando a regra 61 (fator)
+    $padrão  reduzir usando a regra 62 (fator)
 
 
 Estado 63
 
-   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
-
-    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
+   63 fator: NUMERO •
 
-    $padrão  reduzir usando a regra 69 ($@11)
-
-    $@11  ir ao estado 84
+    $padrão  reduzir usando a regra 63 (fator)
 
 
 Estado 64
 
-   51 expressao: expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   47 expressao: expressao • IGUAL expressao_simples
+   48          | expressao • DIFERENTE expressao_simples
+   49          | expressao • MENOR expressao_simples
+   50          | expressao • MENOR_IGUAL expressao_simples
+   51          | expressao • MAIOR expressao_simples
+   52          | expressao • MAIOR_IGUAL expressao_simples
+   72 if_then: IF expressao • $@11 THEN comando_sem_rotulo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    IGUAL        deslocar, e ir ao estado 79
+    DIFERENTE    deslocar, e ir ao estado 80
+    MENOR_IGUAL  deslocar, e ir ao estado 81
+    MAIOR_IGUAL  deslocar, e ir ao estado 82
+    MENOR        deslocar, e ir ao estado 83
+    MAIOR        deslocar, e ir ao estado 84
 
-    $padrão  reduzir usando a regra 51 (expressao)
+    $padrão  reduzir usando a regra 71 ($@11)
+
+    $@11  ir ao estado 85
 
 
 Estado 65
 
-   54 expressao_simples: termo •
-   55 termo: termo • ASTERISCO fator
-   56      | termo • DIV fator
+   53 expressao: expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    DIV        deslocar, e ir ao estado 87
-    ASTERISCO  deslocar, e ir ao estado 88
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
-    $padrão  reduzir usando a regra 54 (expressao_simples)
+    $padrão  reduzir usando a regra 53 (expressao)
 
 
 Estado 66
 
-   57 termo: fator •
+   56 expressao_simples: termo •
+   57 termo: termo • ASTERISCO fator
+   58      | termo • DIV fator
 
-    $padrão  reduzir usando a regra 57 (termo)
+    DIV        deslocar, e ir ao estado 88
+    ASTERISCO  deslocar, e ir ao estado 89
 
+    $padrão  reduzir usando a regra 56 (expressao_simples)
 
-Estado 67
 
-   38 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES
+Estado 67
 
-    IDENT  deslocar, e ir ao estado 89
+   59 termo: fator •
 
-    lista_leituras  ir ao estado 90
-    simb_leitura    ir ao estado 91
+    $padrão  reduzir usando a regra 59 (termo)
 
 
 Estado 68
 
-   42 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES
+   40 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT  deslocar, e ir ao estado 90
 
-    lista_escritas     ir ao estado 92
-    expressao_simples  ir ao estado 93
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    lista_leituras  ir ao estado 91
+    simb_leitura    ir ao estado 92
 
 
 Estado 69
 
+   44 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES
+
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
+
+    lista_escritas     ir ao estado 93
+    expressao_simples  ir ao estado 94
+    termo              ir ao estado 66
+    fator              ir ao estado 67
+
+
+Estado 70
+
    26 comando_composto: T_BEGIN comandos T_END •
 
     $padrão  reduzir usando a regra 26 (comando_composto)
 
 
-Estado 70
+Estado 71
 
    27 comandos: comando PONTO_E_VIRGULA • comandos
    28         | comando PONTO_E_VIRGULA •
@@ -930,26 +945,28 @@ Estado 70
     READ     deslocar, e ir ao estado 42
     WRITE    deslocar, e ir ao estado 43
 
-    T_END    reduzir usando a regra 28 (comandos)
-    T_END    [reduzir usando a regra 29 (comandos)]
-    WHILE    reduzir usando a regra 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
+    PONTO_E_VIRGULA  reduzir usando a regra 39 (chamada_procedimento)
+    T_END            reduzir usando a regra 28 (comandos)
+    T_END            [reduzir usando a regra 29 (comandos)]
+    WHILE            reduzir usando a regra 65 ($@9)
+    $padrão          reduzir usando a regra 28 (comandos)
+
+    comando_composto      ir ao estado 44
+    comandos              ir ao estado 95
+    comando               ir ao estado 46
+    comando_sem_rotulo    ir ao estado 47
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    numero                ir ao estado 52
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
-Estado 71
+Estado 72
 
    30 comando: numero DOIS_PONTOS • comando_sem_rotulo
 
@@ -959,35 +976,37 @@ Estado 71
     READ     deslocar, e ir ao estado 42
     WRITE    deslocar, e ir ao estado 43
 
-    $padrão  reduzir usando a regra 63 ($@9)
+    WHILE    reduzir usando a regra 65 ($@9)
+    $padrão  reduzir usando a regra 39 (chamada_procedimento)
 
-    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
+    comando_composto      ir ao estado 44
+    comando_sem_rotulo    ir ao estado 96
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
-Estado 72
+Estado 73
 
-   65 comando_repetitivo: $@9 WHILE • expressao DO $@10 comando_sem_rotulo
+   67 comando_repetitivo: $@9 WHILE • expressao DO $@10 comando_sem_rotulo
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
-    expressao          ir ao estado 96
-    expressao_simples  ir ao estado 64
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    expressao          ir ao estado 97
+    expressao_simples  ir ao estado 65
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
-Estado 73
+Estado 74
 
-   67 cond_else: ELSE • comando_sem_rotulo
+   69 cond_else: ELSE • comando_sem_rotulo
 
     T_BEGIN  deslocar, e ir ao estado 34
     IDENT    deslocar, e ir ao estado 39
@@ -995,482 +1014,486 @@ Estado 73
     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 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
-
+    WHILE    reduzir usando a regra 65 ($@9)
+    $padrão  reduzir usando a regra 39 (chamada_procedimento)
 
-Estado 74
-
-   66 comando_condicional: if_then cond_else •
-
-    $padrão  reduzir usando a regra 66 (comando_condicional)
+    comando_composto      ir ao estado 44
+    comando_sem_rotulo    ir ao estado 98
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
 Estado 75
 
-   16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA
+   68 comando_condicional: if_then cond_else •
 
-    PONTO_E_VIRGULA  deslocar, e ir ao estado 98
+    $padrão  reduzir usando a regra 68 (comando_condicional)
 
 
 Estado 76
 
-   25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco •
+   16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 • PONTO_E_VIRGULA
 
-    $padrão  reduzir usando a regra 25 (declaracao_procedimento)
+    PONTO_E_VIRGULA  deslocar, e ir ao estado 99
 
 
 Estado 77
 
-   59 atribuicao: IDENT $@8 ATRIBUICAO • expressao_simples
-
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+   25 declaracao_procedimento: PROCEDURE IDENT $@7 PONTO_E_VIRGULA bloco •
 
-    expressao_simples  ir ao estado 99
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    $padrão  reduzir usando a regra 25 (declaracao_procedimento)
 
 
 Estado 78
 
-   45 expressao: expressao IGUAL • expressao_simples
+   61 atribuicao: IDENT $@8 ATRIBUICAO • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 100
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 79
 
-   46 expressao: expressao DIFERENTE • expressao_simples
+   47 expressao: expressao IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 101
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 80
 
-   48 expressao: expressao MENOR_IGUAL • expressao_simples
+   48 expressao: expressao DIFERENTE • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 102
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 81
 
-   50 expressao: expressao MAIOR_IGUAL • expressao_simples
+   50 expressao: expressao MENOR_IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 103
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 82
 
-   47 expressao: expressao MENOR • expressao_simples
+   52 expressao: expressao MAIOR_IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 104
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 83
 
-   49 expressao: expressao MAIOR • expressao_simples
+   49 expressao: expressao MENOR • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     expressao_simples  ir ao estado 105
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 84
 
-   70 if_then: IF expressao $@11 • THEN comando_sem_rotulo
+   51 expressao: expressao MAIOR • expressao_simples
 
-    THEN  deslocar, e ir ao estado 106
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
+    expressao_simples  ir ao estado 106
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
-Estado 85
 
-   52 expressao_simples: expressao_simples MAIS • termo
+Estado 85
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+   72 if_then: IF expressao $@11 • THEN comando_sem_rotulo
 
-    termo  ir ao estado 107
-    fator  ir ao estado 66
+    THEN  deslocar, e ir ao estado 107
 
 
 Estado 86
 
-   53 expressao_simples: expressao_simples MENOS • termo
+   54 expressao_simples: expressao_simples MAIS • termo
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     termo  ir ao estado 108
-    fator  ir ao estado 66
+    fator  ir ao estado 67
 
 
 Estado 87
 
-   56 termo: termo DIV • fator
+   55 expressao_simples: expressao_simples MENOS • termo
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
-    fator  ir ao estado 109
+    termo  ir ao estado 109
+    fator  ir ao estado 67
 
 
 Estado 88
 
-   55 termo: termo ASTERISCO • fator
+   58 termo: termo DIV • fator
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
     fator  ir ao estado 110
 
 
 Estado 89
 
-   41 simb_leitura: IDENT •
+   57 termo: termo ASTERISCO • fator
 
-    $padrão  reduzir usando a regra 41 (simb_leitura)
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
+
+    fator  ir ao estado 111
 
 
 Estado 90
 
-   38 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES
-   39 lista_leituras: lista_leituras • VIRGULA simb_leitura
+   43 simb_leitura: IDENT •
 
-    FECHA_PARENTESES  deslocar, e ir ao estado 111
-    VIRGULA           deslocar, e ir ao estado 112
+    $padrão  reduzir usando a regra 43 (simb_leitura)
 
 
 Estado 91
 
-   40 lista_leituras: simb_leitura •
+   40 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES
+   41 lista_leituras: lista_leituras • VIRGULA simb_leitura
 
-    $padrão  reduzir usando a regra 40 (lista_leituras)
+    FECHA_PARENTESES  deslocar, e ir ao estado 112
+    VIRGULA           deslocar, e ir ao estado 113
 
 
 Estado 92
 
-   42 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES
-   43 lista_escritas: lista_escritas • VIRGULA expressao_simples
+   42 lista_leituras: simb_leitura •
 
-    FECHA_PARENTESES  deslocar, e ir ao estado 113
-    VIRGULA           deslocar, e ir ao estado 114
+    $padrão  reduzir usando a regra 42 (lista_leituras)
 
 
 Estado 93
 
-   44 lista_escritas: 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
+   44 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES
+   45 lista_escritas: lista_escritas • VIRGULA expressao_simples
 
-    $padrão  reduzir usando a regra 44 (lista_escritas)
+    FECHA_PARENTESES  deslocar, e ir ao estado 114
+    VIRGULA           deslocar, e ir ao estado 115
 
 
 Estado 94
 
-   27 comandos: comando PONTO_E_VIRGULA comandos •
+   46 lista_escritas: expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    $padrão  reduzir usando a regra 27 (comandos)
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
+
+    $padrão  reduzir usando a regra 46 (lista_escritas)
 
 
 Estado 95
 
-   30 comando: numero DOIS_PONTOS comando_sem_rotulo •
+   27 comandos: comando PONTO_E_VIRGULA comandos •
 
-    $padrão  reduzir usando a regra 30 (comando)
+    $padrão  reduzir usando a regra 27 (comandos)
 
 
 Estado 96
 
-   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
+   30 comando: numero DOIS_PONTOS comando_sem_rotulo •
 
-    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
+    $padrão  reduzir usando a regra 30 (comando)
 
 
 Estado 97
 
-   67 cond_else: ELSE comando_sem_rotulo •
+   47 expressao: expressao • IGUAL expressao_simples
+   48          | expressao • DIFERENTE expressao_simples
+   49          | expressao • MENOR expressao_simples
+   50          | expressao • MENOR_IGUAL expressao_simples
+   51          | expressao • MAIOR expressao_simples
+   52          | expressao • MAIOR_IGUAL expressao_simples
+   67 comando_repetitivo: $@9 WHILE expressao • DO $@10 comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 67 (cond_else)
+    DO           deslocar, e ir ao estado 116
+    IGUAL        deslocar, e ir ao estado 79
+    DIFERENTE    deslocar, e ir ao estado 80
+    MENOR_IGUAL  deslocar, e ir ao estado 81
+    MAIOR_IGUAL  deslocar, e ir ao estado 82
+    MENOR        deslocar, e ir ao estado 83
+    MAIOR        deslocar, e ir ao estado 84
 
 
 Estado 98
 
-   16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA •
+   69 cond_else: ELSE comando_sem_rotulo •
 
-    $padrão  reduzir usando a regra 16 (declara_var)
+    $padrão  reduzir usando a regra 69 (cond_else)
 
 
 Estado 99
 
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
-   59 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples •
-
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+   16 declara_var: $@5 lista_id_var DOIS_PONTOS tipo $@6 PONTO_E_VIRGULA •
 
-    $padrão  reduzir usando a regra 59 (atribuicao)
+    $padrão  reduzir usando a regra 16 (declara_var)
 
 
 Estado 100
 
-   45 expressao: expressao IGUAL expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
+   61 atribuicao: IDENT $@8 ATRIBUICAO expressao_simples •
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
-    $padrão  reduzir usando a regra 45 (expressao)
+    $padrão  reduzir usando a regra 61 (atribuicao)
 
 
 Estado 101
 
-   46 expressao: expressao DIFERENTE expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   47 expressao: expressao IGUAL expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
-    $padrão  reduzir usando a regra 46 (expressao)
+    $padrão  reduzir usando a regra 47 (expressao)
 
 
 Estado 102
 
-   48 expressao: expressao MENOR_IGUAL expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   48 expressao: expressao DIFERENTE expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
     $padrão  reduzir usando a regra 48 (expressao)
 
 
 Estado 103
 
-   50 expressao: expressao MAIOR_IGUAL expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   50 expressao: expressao MENOR_IGUAL expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
     $padrão  reduzir usando a regra 50 (expressao)
 
 
 Estado 104
 
-   47 expressao: expressao MENOR expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   52 expressao: expressao MAIOR_IGUAL expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
-    $padrão  reduzir usando a regra 47 (expressao)
+    $padrão  reduzir usando a regra 52 (expressao)
 
 
 Estado 105
 
-   49 expressao: expressao MAIOR expressao_simples •
-   52 expressao_simples: expressao_simples • MAIS termo
-   53                  | expressao_simples • MENOS termo
+   49 expressao: expressao MENOR expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    MAIS   deslocar, e ir ao estado 85
-    MENOS  deslocar, e ir ao estado 86
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
     $padrão  reduzir usando a regra 49 (expressao)
 
 
 Estado 106
 
-   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
+   51 expressao: expressao MAIOR expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
 
-    $padrão  reduzir usando a regra 63 ($@9)
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
 
-    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
+    $padrão  reduzir usando a regra 51 (expressao)
 
 
 Estado 107
 
-   52 expressao_simples: expressao_simples MAIS termo •
-   55 termo: termo • ASTERISCO fator
-   56      | termo • DIV fator
+   72 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
 
-    DIV        deslocar, e ir ao estado 87
-    ASTERISCO  deslocar, e ir ao estado 88
+    WHILE    reduzir usando a regra 65 ($@9)
+    $padrão  reduzir usando a regra 39 (chamada_procedimento)
 
-    $padrão  reduzir usando a regra 52 (expressao_simples)
+    comando_composto      ir ao estado 44
+    comando_sem_rotulo    ir ao estado 117
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
 Estado 108
 
-   53 expressao_simples: expressao_simples MENOS termo •
-   55 termo: termo • ASTERISCO fator
-   56      | termo • DIV fator
+   54 expressao_simples: expressao_simples MAIS termo •
+   57 termo: termo • ASTERISCO fator
+   58      | termo • DIV fator
 
-    DIV        deslocar, e ir ao estado 87
-    ASTERISCO  deslocar, e ir ao estado 88
+    DIV        deslocar, e ir ao estado 88
+    ASTERISCO  deslocar, e ir ao estado 89
 
-    $padrão  reduzir usando a regra 53 (expressao_simples)
+    $padrão  reduzir usando a regra 54 (expressao_simples)
 
 
 Estado 109
 
-   56 termo: termo DIV fator •
+   55 expressao_simples: expressao_simples MENOS termo •
+   57 termo: termo • ASTERISCO fator
+   58      | termo • DIV fator
+
+    DIV        deslocar, e ir ao estado 88
+    ASTERISCO  deslocar, e ir ao estado 89
 
-    $padrão  reduzir usando a regra 56 (termo)
+    $padrão  reduzir usando a regra 55 (expressao_simples)
 
 
 Estado 110
 
-   55 termo: termo ASTERISCO fator •
+   58 termo: termo DIV fator •
 
-    $padrão  reduzir usando a regra 55 (termo)
+    $padrão  reduzir usando a regra 58 (termo)
 
 
 Estado 111
 
-   38 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES •
+   57 termo: termo ASTERISCO fator •
 
-    $padrão  reduzir usando a regra 38 (leitura)
+    $padrão  reduzir usando a regra 57 (termo)
 
 
 Estado 112
 
-   39 lista_leituras: lista_leituras VIRGULA • simb_leitura
-
-    IDENT  deslocar, e ir ao estado 89
+   40 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES •
 
-    simb_leitura  ir ao estado 117
+    $padrão  reduzir usando a regra 40 (leitura)
 
 
 Estado 113
 
-   42 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES •
+   41 lista_leituras: lista_leituras VIRGULA • simb_leitura
 
-    $padrão  reduzir usando a regra 42 (escrita)
+    IDENT  deslocar, e ir ao estado 90
 
+    simb_leitura  ir ao estado 118
 
-Estado 114
 
-   43 lista_escritas: lista_escritas VIRGULA • expressao_simples
+Estado 114
 
-    IDENT   deslocar, e ir ao estado 61
-    NUMERO  deslocar, e ir ao estado 62
+   44 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES •
 
-    expressao_simples  ir ao estado 118
-    termo              ir ao estado 65
-    fator              ir ao estado 66
+    $padrão  reduzir usando a regra 44 (escrita)
 
 
 Estado 115
 
-   65 comando_repetitivo: $@9 WHILE expressao DO • $@10 comando_sem_rotulo
+   45 lista_escritas: lista_escritas VIRGULA • expressao_simples
 
-    $padrão  reduzir usando a regra 64 ($@10)
+    IDENT   deslocar, e ir ao estado 62
+    NUMERO  deslocar, e ir ao estado 63
 
-    $@10  ir ao estado 119
+    expressao_simples  ir ao estado 119
+    termo              ir ao estado 66
+    fator              ir ao estado 67
 
 
 Estado 116
 
-   70 if_then: IF expressao $@11 THEN comando_sem_rotulo •
+   67 comando_repetitivo: $@9 WHILE expressao DO • $@10 comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 70 (if_then)
+    $padrão  reduzir usando a regra 66 ($@10)
+
+    $@10  ir ao estado 120
 
 
 Estado 117
 
-   39 lista_leituras: lista_leituras VIRGULA simb_leitura •
+   72 if_then: IF expressao $@11 THEN comando_sem_rotulo •
 
-    $padrão  reduzir usando a regra 39 (lista_leituras)
+    $padrão  reduzir usando a regra 72 (if_then)
 
 
 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
+   41 lista_leituras: lista_leituras VIRGULA simb_leitura •
 
-    $padrão  reduzir usando a regra 43 (lista_escritas)
+    $padrão  reduzir usando a regra 41 (lista_leituras)
 
 
 Estado 119
 
-   65 comando_repetitivo: $@9 WHILE expressao DO $@10 • comando_sem_rotulo
+   45 lista_escritas: lista_escritas VIRGULA expressao_simples •
+   54 expressao_simples: expressao_simples • MAIS termo
+   55                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 86
+    MENOS  deslocar, e ir ao estado 87
+
+    $padrão  reduzir usando a regra 45 (lista_escritas)
+
+
+Estado 120
+
+   67 comando_repetitivo: $@9 WHILE expressao DO $@10 • comando_sem_rotulo
 
     T_BEGIN  deslocar, e ir ao estado 34
     IDENT    deslocar, e ir ao estado 39
@@ -1478,21 +1501,23 @@ Estado 119
     READ     deslocar, e ir ao estado 42
     WRITE    deslocar, e ir ao estado 43
 
-    $padrão  reduzir usando a regra 63 ($@9)
+    WHILE    reduzir usando a regra 65 ($@9)
+    $padrão  reduzir usando a regra 39 (chamada_procedimento)
 
-    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
+    comando_composto      ir ao estado 44
+    comando_sem_rotulo    ir ao estado 121
+    chamada_procedimento  ir ao estado 48
+    leitura               ir ao estado 49
+    escrita               ir ao estado 50
+    atribuicao            ir ao estado 51
+    comando_repetitivo    ir ao estado 53
+    $@9                   ir ao estado 54
+    comando_condicional   ir ao estado 55
+    if_then               ir ao estado 56
 
 
-Estado 120
+Estado 121
 
-   65 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo •
+   67 comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo •
 
-    $padrão  reduzir usando a regra 65 (comando_repetitivo)
+    $padrão  reduzir usando a regra 67 (comando_repetitivo)
diff --git a/compilador.tab.c b/compilador.tab.c
index 4ab7d2e..faebca5 100644
--- a/compilador.tab.c
+++ b/compilador.tab.c
@@ -183,25 +183,26 @@ enum yysymbol_kind_t
   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  */
+  YYSYMBOL_chamada_procedimento = 67,      /* chamada_procedimento  */
+  YYSYMBOL_leitura = 68,                   /* leitura  */
+  YYSYMBOL_lista_leituras = 69,            /* lista_leituras  */
+  YYSYMBOL_simb_leitura = 70,              /* simb_leitura  */
+  YYSYMBOL_escrita = 71,                   /* escrita  */
+  YYSYMBOL_lista_escritas = 72,            /* lista_escritas  */
+  YYSYMBOL_expressao = 73,                 /* expressao  */
+  YYSYMBOL_expressao_simples = 74,         /* expressao_simples  */
+  YYSYMBOL_termo = 75,                     /* termo  */
+  YYSYMBOL_atribuicao = 76,                /* atribuicao  */
+  YYSYMBOL_77_8 = 77,                      /* $@8  */
+  YYSYMBOL_fator = 78,                     /* fator  */
+  YYSYMBOL_numero = 79,                    /* numero  */
+  YYSYMBOL_comando_repetitivo = 80,        /* comando_repetitivo  */
+  YYSYMBOL_81_9 = 81,                      /* $@9  */
+  YYSYMBOL_82_10 = 82,                     /* $@10  */
+  YYSYMBOL_comando_condicional = 83,       /* comando_condicional  */
+  YYSYMBOL_cond_else = 84,                 /* cond_else  */
+  YYSYMBOL_if_then = 85,                   /* if_then  */
+  YYSYMBOL_86_11 = 86                      /* $@11  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -529,16 +530,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   105
+#define YYLAST   102
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  43
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  43
+#define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  71
+#define YYNRULES  73
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  121
+#define YYNSTATES  122
 
 /* YYMAXUTOK -- Last valid token kind.  */
 #define YYMAXUTOK   297
@@ -594,11 +595,11 @@ static const yytype_int16 yyrline[] =
        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
+     183,   186,   187,   190,   191,   192,   193,   194,   195,   196,
+     199,   213,   216,   217,   220,   229,   232,   235,   240,   243,
+     246,   249,   252,   255,   258,   261,   264,   267,   270,   273,
+     276,   279,   279,   297,   308,   315,   317,   324,   317,   350,
+     357,   359,   362,   362
 };
 #endif
 
@@ -626,10 +627,10 @@ static const char *const yytname[] =
   "$@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", "$@8", "fator",
-  "numero", "comando_repetitivo", "$@9", "$@10", "comando_condicional",
-  "cond_else", "if_then", "$@11", YY_NULLPTR
+  "chamada_procedimento", "leitura", "lista_leituras", "simb_leitura",
+  "escrita", "lista_escritas", "expressao", "expressao_simples", "termo",
+  "atribuicao", "$@8", "fator", "numero", "comando_repetitivo", "$@9",
+  "$@10", "comando_condicional", "cond_else", "if_then", "$@11", YY_NULLPTR
 };
 
 static const char *
@@ -639,12 +640,12 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-72)
+#define YYPACT_NINF (-73)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-65)
+#define YYTABLE_NINF (-67)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -653,19 +654,19 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-     -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
+     -73,     5,    16,   -73,     8,    20,    13,   -73,     3,    23,
+      49,    50,   -73,    60,    58,    56,   -73,   -73,   -73,   -73,
+      57,   -73,   -73,    52,    59,   -73,    61,    62,    63,   -73,
+     -73,   -73,    -2,   -73,    10,   -73,    64,    65,    69,   -73,
+     -10,   -73,    67,    75,   -73,    70,    73,   -73,   -73,   -73,
+     -73,   -73,    74,   -73,    66,   -73,    68,   -73,   -73,   -73,
+      50,    71,   -73,   -73,    24,    -9,   -20,   -73,    76,   -10,
+     -73,    10,    12,   -10,    12,   -73,    77,   -73,   -10,   -10,
+     -10,   -10,   -10,   -10,   -10,    72,   -10,   -10,   -10,   -10,
+     -73,    38,   -73,    40,    -9,   -73,   -73,     7,   -73,   -73,
+      -9,    -9,    -9,    -9,    -9,    -9,    -9,    12,   -20,   -20,
+     -73,   -73,   -73,    76,   -73,   -10,   -73,   -73,   -73,    -9,
+      12,   -73
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -676,36 +677,36 @@ static const yytype_int8 yydefact[] =
        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
+      13,    20,     0,    25,    30,     6,     0,     0,     0,    61,
+       0,    65,     0,     0,    34,     0,     0,    32,    39,    37,
+      38,    33,     0,    36,     0,    35,    71,    19,    18,    16,
+       8,     0,    63,    64,    72,    54,    57,    60,     0,     0,
+      27,    29,    40,     0,    40,    69,     0,    26,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      44,     0,    43,     0,    47,    28,    31,     0,    70,    17,
+      62,    48,    49,    51,    53,    50,    52,    40,    55,    56,
+      59,    58,    41,     0,    45,     0,    67,    73,    42,    46,
+      40,    68
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -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
+     -73,   -73,   -73,    26,   -73,   -73,   -73,   -73,   -73,   -73,
+     -73,    78,   -73,   -73,   -73,   -73,   -73,   -73,   -73,   -73,
+      55,    17,   -73,   -72,   -73,   -73,   -73,   -21,   -73,   -73,
+      14,   -68,   -26,   -73,   -73,   -25,   -73,   -73,   -73,   -73,
+     -73,   -73,   -73,   -73
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
        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
+      24,    25,    26,    76,    59,    32,     8,    23,    29,    38,
+      44,    45,    46,    47,    48,    49,    91,    92,    50,    93,
+      64,    65,    66,    51,    61,    67,    52,    53,    54,   120,
+      55,    75,    56,    85
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -713,32 +714,32 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int8 yytable[] =
 {
-      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
+      96,    94,    98,    62,    36,     3,    37,    88,     9,    10,
+     100,   101,   102,   103,   104,   105,   106,   -40,    89,     4,
+      34,     5,    34,    39,     6,    39,     7,    86,    87,    63,
+      11,    40,   116,    40,   -66,   117,   -66,    79,    80,    81,
+      82,    83,    84,   112,   113,   114,   115,   119,   121,    41,
+      42,    43,    42,    43,    79,    80,    81,    82,    83,    84,
+     108,   109,    12,   110,   111,    13,    16,    17,   -10,    22,
+      27,    68,   -15,    34,    31,    33,    60,    57,    58,    69,
+      71,    70,    72,    35,    99,    78,    77,    97,    95,    90,
+      73,    74,   118,     0,   107,     0,     0,     0,     0,     0,
+       0,     0,    30
 };
 
 static const yytype_int8 yycheck[] =
 {
-      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
+      72,    69,    74,    13,     6,     0,     8,    27,     5,     6,
+      78,    79,    80,    81,    82,    83,    84,     7,    38,     3,
+      10,    13,    10,    13,     4,    13,    13,    36,    37,    39,
+       7,    21,    25,    21,    24,   107,    24,    30,    31,    32,
+      33,    34,    35,     5,     6,     5,     6,   115,   120,    39,
+      40,    41,    40,    41,    30,    31,    32,    33,    34,    35,
+      86,    87,    13,    88,    89,    15,     6,     9,    12,    12,
+      18,     4,    13,    10,    13,    13,     7,    13,    13,     4,
+       7,    11,     8,    28,     7,    14,    60,    73,    71,    13,
+      24,    23,   113,    -1,    22,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    24
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -749,15 +750,15 @@ static const yytype_int8 yystos[] =
        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
+      21,    39,    40,    41,    63,    64,    65,    66,    67,    68,
+      71,    76,    79,    80,    81,    83,    85,    13,    13,    57,
+       7,    77,    13,    39,    73,    74,    75,    78,     4,     4,
+      11,     7,     8,    24,    23,    84,    56,    46,    14,    30,
+      31,    32,    33,    34,    35,    86,    36,    37,    27,    38,
+      13,    69,    70,    72,    74,    64,    66,    73,    66,     7,
+      74,    74,    74,    74,    74,    74,    74,    22,    75,    75,
+      78,    78,     5,     6,     5,     6,    25,    66,    70,    74,
+      82,    66
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
@@ -766,11 +767,11 @@ static const yytype_int8 yyr1[] =
        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
+      64,    65,    65,    66,    66,    66,    66,    66,    66,    66,
+      67,    68,    69,    69,    70,    71,    72,    72,    73,    73,
+      73,    73,    73,    73,    73,    74,    74,    74,    75,    75,
+      75,    77,    76,    78,    78,    79,    81,    82,    80,    83,
+      84,    84,    86,    85
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -779,11 +780,11 @@ static const yytype_int8 yyr2[] =
        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
+       0,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       0,     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
 };
 
 
@@ -1251,7 +1252,7 @@ yyreduce:
              {
              geraCodigo (NULL, "INPP");
              }
-#line 1255 "compilador.tab.c"
+#line 1256 "compilador.tab.c"
     break;
 
   case 3: /* programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO  */
@@ -1259,7 +1260,7 @@ yyreduce:
              {
                geraCodigo (NULL, "PARA");
              }
-#line 1263 "compilador.tab.c"
+#line 1264 "compilador.tab.c"
     break;
 
   case 4: /* $@2: %empty  */
@@ -1274,7 +1275,7 @@ yyreduce:
             strcat(buffer,r_main);
             geraCodigo(NULL,buffer);
          }
-#line 1278 "compilador.tab.c"
+#line 1279 "compilador.tab.c"
     break;
 
   case 5: /* $@3: %empty  */
@@ -1284,7 +1285,7 @@ yyreduce:
             desempilha(r_main,rot);
             geraCodigo(r_main,"NADA");
          }
-#line 1288 "compilador.tab.c"
+#line 1289 "compilador.tab.c"
     break;
 
   case 6: /* bloco: parte_declara_rotulos parte_declara_vars $@2 parte_declara_subrotinas $@3 comando_composto  */
@@ -1296,19 +1297,19 @@ yyreduce:
             geraCodigo(NULL,buffer);
             desloc = 0;
          }
-#line 1300 "compilador.tab.c"
+#line 1301 "compilador.tab.c"
     break;
 
   case 10: /* $@4: %empty  */
 #line 93 "compilador.y"
               { }
-#line 1306 "compilador.tab.c"
+#line 1307 "compilador.tab.c"
     break;
 
   case 15: /* $@5: %empty  */
 #line 101 "compilador.y"
               { num_vars = 0; }
-#line 1312 "compilador.tab.c"
+#line 1313 "compilador.tab.c"
     break;
 
   case 16: /* $@6: %empty  */
@@ -1318,7 +1319,7 @@ yyreduce:
                sprintf(buffer, "AMEM %d", num_vars);
                geraCodigo(NULL, buffer);
               }
-#line 1322 "compilador.tab.c"
+#line 1323 "compilador.tab.c"
     break;
 
   case 18: /* tipo: IDENT  */
@@ -1331,9 +1332,9 @@ yyreduce:
                 } else {
                     yyerror("Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos.");
                 }
-                //mostra_ts(ts); // Mostra a tabela após a inserção
+                mostra_ts(ts); // Mostra a tabela após a inserção
                }
-#line 1337 "compilador.tab.c"
+#line 1338 "compilador.tab.c"
     break;
 
   case 19: /* lista_id_var: lista_id_var VIRGULA IDENT  */
@@ -1346,7 +1347,7 @@ yyreduce:
                insere_ts(token,VS,nivel_lexico,info,ts);
                desloc += 1;
               }
-#line 1350 "compilador.tab.c"
+#line 1351 "compilador.tab.c"
     break;
 
   case 20: /* lista_id_var: IDENT  */
@@ -1360,7 +1361,7 @@ yyreduce:
                desloc += 1;
                /* insere vars na tabela de s�mbolos */
             }
-#line 1364 "compilador.tab.c"
+#line 1365 "compilador.tab.c"
     break;
 
   case 25: /* $@7: %empty  */
@@ -1380,19 +1381,19 @@ yyreduce:
             char buffer[50];
             sprintf(buffer,"ENPR %d",nivel_lexico);
             geraCodigo(r_proc,buffer);
-            //mostra_ts(ts);
+            mostra_ts(ts);
             }
-#line 1386 "compilador.tab.c"
+#line 1387 "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"
+#line 1393 "compilador.tab.c"
     break;
 
-  case 42: /* simb_leitura: IDENT  */
-#line 208 "compilador.y"
+  case 44: /* simb_leitura: IDENT  */
+#line 220 "compilador.y"
                     {
                geraCodigo(NULL, "LEIT");
                l_elem = busca(token,ts);
@@ -1400,108 +1401,109 @@ yyreduce:
                sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->info.vs.desloc);
                geraCodigo(NULL,buffer);
             }
-#line 1404 "compilador.tab.c"
+#line 1405 "compilador.tab.c"
     break;
 
-  case 44: /* lista_escritas: lista_escritas VIRGULA expressao_simples  */
-#line 220 "compilador.y"
+  case 46: /* lista_escritas: lista_escritas VIRGULA expressao_simples  */
+#line 232 "compilador.y"
                                                          {
                geraCodigo(NULL,"IMPR");
             }
-#line 1412 "compilador.tab.c"
+#line 1413 "compilador.tab.c"
     break;
 
-  case 45: /* lista_escritas: expressao_simples  */
-#line 223 "compilador.y"
+  case 47: /* lista_escritas: expressao_simples  */
+#line 235 "compilador.y"
                                 {
                geraCodigo(NULL,"IMPR");
             }
-#line 1420 "compilador.tab.c"
+#line 1421 "compilador.tab.c"
     break;
 
-  case 46: /* expressao: expressao IGUAL expressao_simples  */
-#line 228 "compilador.y"
+  case 48: /* expressao: expressao IGUAL expressao_simples  */
+#line 240 "compilador.y"
                                              {
             geraCodigo(NULL, "CMIG"); // Adiciona operação de cmig
          }
-#line 1428 "compilador.tab.c"
+#line 1429 "compilador.tab.c"
     break;
 
-  case 47: /* expressao: expressao DIFERENTE expressao_simples  */
-#line 231 "compilador.y"
+  case 49: /* expressao: expressao DIFERENTE expressao_simples  */
+#line 243 "compilador.y"
                                                 {
             geraCodigo(NULL, "CMDG"); // Adiciona operação de cmdg
          }
-#line 1436 "compilador.tab.c"
+#line 1437 "compilador.tab.c"
     break;
 
-  case 48: /* expressao: expressao MENOR expressao_simples  */
-#line 234 "compilador.y"
+  case 50: /* expressao: expressao MENOR expressao_simples  */
+#line 246 "compilador.y"
                                              {
             geraCodigo(NULL, "CMME"); // Adiciona operação de cmme
          }
-#line 1444 "compilador.tab.c"
+#line 1445 "compilador.tab.c"
     break;
 
-  case 49: /* expressao: expressao MENOR_IGUAL expressao_simples  */
-#line 237 "compilador.y"
+  case 51: /* expressao: expressao MENOR_IGUAL expressao_simples  */
+#line 249 "compilador.y"
                                                    {
             geraCodigo(NULL, "CMEG"); // Adiciona operação de cmeg
          }
-#line 1452 "compilador.tab.c"
+#line 1453 "compilador.tab.c"
     break;
 
-  case 50: /* expressao: expressao MAIOR expressao_simples  */
-#line 240 "compilador.y"
+  case 52: /* expressao: expressao MAIOR expressao_simples  */
+#line 252 "compilador.y"
                                              {
             geraCodigo(NULL, "CMMA"); // Adiciona operação de cmma
          }
-#line 1460 "compilador.tab.c"
+#line 1461 "compilador.tab.c"
     break;
 
-  case 51: /* expressao: expressao MAIOR_IGUAL expressao_simples  */
-#line 243 "compilador.y"
+  case 53: /* expressao: expressao MAIOR_IGUAL expressao_simples  */
+#line 255 "compilador.y"
                                                    {
             geraCodigo(NULL, "CMAG"); // Adiciona operação de cmag
          }
-#line 1468 "compilador.tab.c"
+#line 1469 "compilador.tab.c"
     break;
 
-  case 53: /* expressao_simples: expressao_simples MAIS termo  */
-#line 249 "compilador.y"
+  case 55: /* expressao_simples: expressao_simples MAIS termo  */
+#line 261 "compilador.y"
                                                 {
                geraCodigo(NULL, "SOMA"); // Adiciona operação de soma
             }
-#line 1476 "compilador.tab.c"
+#line 1477 "compilador.tab.c"
     break;
 
-  case 54: /* expressao_simples: expressao_simples MENOS termo  */
-#line 252 "compilador.y"
+  case 56: /* expressao_simples: expressao_simples MENOS termo  */
+#line 264 "compilador.y"
                                             {
                geraCodigo(NULL, "SUBT"); // Adiciona operação de subt
             }
-#line 1484 "compilador.tab.c"
+#line 1485 "compilador.tab.c"
     break;
 
-  case 56: /* termo: termo ASTERISCO fator  */
-#line 258 "compilador.y"
+  case 58: /* termo: termo ASTERISCO fator  */
+#line 270 "compilador.y"
                              {
                geraCodigo(NULL, "MULT"); // Adiciona operação de mult
             }
-#line 1492 "compilador.tab.c"
+#line 1493 "compilador.tab.c"
     break;
 
-  case 57: /* termo: termo DIV fator  */
-#line 261 "compilador.y"
+  case 59: /* termo: termo DIV fator  */
+#line 273 "compilador.y"
                               {
                geraCodigo(NULL, "DIVI"); // Adiciona operação de divi
             }
-#line 1500 "compilador.tab.c"
+#line 1501 "compilador.tab.c"
     break;
 
-  case 59: /* $@8: %empty  */
-#line 267 "compilador.y"
+  case 61: /* $@8: %empty  */
+#line 279 "compilador.y"
                   {
+   mostra_ts(ts);
     // Busca variável no lado esquerdo
     l_elem = busca(token, ts);
     if (l_elem == NULL) {
@@ -1511,22 +1513,22 @@ yyreduce:
         destino_desloc = l_elem->info.vs.desloc;
     }
 }
-#line 1515 "compilador.tab.c"
+#line 1517 "compilador.tab.c"
     break;
 
-  case 60: /* atribuicao: IDENT $@8 ATRIBUICAO expressao_simples  */
-#line 276 "compilador.y"
+  case 62: /* atribuicao: IDENT $@8 ATRIBUICAO expressao_simples  */
+#line 289 "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 1526 "compilador.tab.c"
+#line 1528 "compilador.tab.c"
     break;
 
-  case 61: /* fator: IDENT  */
-#line 284 "compilador.y"
+  case 63: /* fator: IDENT  */
+#line 297 "compilador.y"
              {
     // Carrega variável
     l_elem = busca(token, ts);
@@ -1538,22 +1540,22 @@ yyreduce:
         geraCodigo(NULL, buffer);
     }
 }
-#line 1542 "compilador.tab.c"
+#line 1544 "compilador.tab.c"
     break;
 
-  case 62: /* fator: NUMERO  */
-#line 295 "compilador.y"
+  case 64: /* fator: NUMERO  */
+#line 308 "compilador.y"
          {
     // Empilha constante
     char buffer[50];
     sprintf(buffer, "CRCT %s", token);
     geraCodigo(NULL, buffer);
 }
-#line 1553 "compilador.tab.c"
+#line 1555 "compilador.tab.c"
     break;
 
-  case 64: /* $@9: %empty  */
-#line 304 "compilador.y"
+  case 66: /* $@9: %empty  */
+#line 317 "compilador.y"
                     {
                char r_ini[4];
                sprintf(r_ini, "R%02d", rot_id);
@@ -1561,11 +1563,11 @@ yyreduce:
                rot_id += 1;
                geraCodigo(r_ini,"NADA");
             }
-#line 1565 "compilador.tab.c"
+#line 1567 "compilador.tab.c"
     break;
 
-  case 65: /* $@10: %empty  */
-#line 311 "compilador.y"
+  case 67: /* $@10: %empty  */
+#line 324 "compilador.y"
                                {
                char r_fim[4];
                sprintf(r_fim, "R%02d", rot_id);
@@ -1576,11 +1578,11 @@ yyreduce:
                strcat(buffer,r_fim);
                geraCodigo(NULL,buffer);
             }
-#line 1580 "compilador.tab.c"
+#line 1582 "compilador.tab.c"
     break;
 
-  case 66: /* comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo  */
-#line 321 "compilador.y"
+  case 68: /* comando_repetitivo: $@9 WHILE expressao DO $@10 comando_sem_rotulo  */
+#line 334 "compilador.y"
                                {
                char r_ini[4];
                char r_fim[4];
@@ -1595,21 +1597,21 @@ yyreduce:
 
                geraCodigo(r_fim,"NADA");
             }
-#line 1599 "compilador.tab.c"
+#line 1601 "compilador.tab.c"
     break;
 
-  case 67: /* comando_condicional: if_then cond_else  */
-#line 337 "compilador.y"
+  case 69: /* comando_condicional: if_then cond_else  */
+#line 350 "compilador.y"
                                        {
                char r_fim[4];
                desempilha(r_fim,rot);
                geraCodigo(r_fim,"NADA");
             }
-#line 1609 "compilador.tab.c"
+#line 1611 "compilador.tab.c"
     break;
 
-  case 70: /* $@11: %empty  */
-#line 349 "compilador.y"
+  case 72: /* $@11: %empty  */
+#line 362 "compilador.y"
                       {
                char r_else[4];
                sprintf(r_else,"R%02d",rot_id);
@@ -1625,11 +1627,11 @@ yyreduce:
                empilha(r_fim, rot);
                rot_id += 1;
             }
-#line 1629 "compilador.tab.c"
+#line 1631 "compilador.tab.c"
     break;
 
-  case 71: /* if_then: IF expressao $@11 THEN comando_sem_rotulo  */
-#line 364 "compilador.y"
+  case 73: /* if_then: IF expressao $@11 THEN comando_sem_rotulo  */
+#line 377 "compilador.y"
                                     {
                char r_fim[4];
                desempilha(r_fim,rot);
@@ -1644,11 +1646,11 @@ yyreduce:
 
                geraCodigo(r_else,"NADA");
             }
-#line 1648 "compilador.tab.c"
+#line 1650 "compilador.tab.c"
     break;
 
 
-#line 1652 "compilador.tab.c"
+#line 1654 "compilador.tab.c"
 
       default: break;
     }
@@ -1841,7 +1843,7 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 381 "compilador.y"
+#line 394 "compilador.y"
 
 
 int main (int argc, char** argv) {
diff --git a/compilador.y b/compilador.y
index d231df9..91a5f84 100644
--- a/compilador.y
+++ b/compilador.y
@@ -118,7 +118,7 @@ tipo        : IDENT
                 } else {
                     yyerror("Tipo não reconhecido. Somente 'integer' ou 'boolean' são permitidos.");
                 }
-                //mostra_ts(ts); // Mostra a tabela após a inserção
+                mostra_ts(ts); // Mostra a tabela após a inserção
                }
 ;
 
@@ -168,7 +168,7 @@ declaracao_procedimento: PROCEDURE IDENT {
             char buffer[50];
             sprintf(buffer,"ENPR %d",nivel_lexico);
             geraCodigo(r_proc,buffer);
-            //mostra_ts(ts);
+            mostra_ts(ts);
             }
             PONTO_E_VIRGULA bloco
             { nivel_lexico -= 1; }
@@ -193,10 +193,22 @@ comando_sem_rotulo: atribuicao
             | comando_repetitivo
             | leitura
             | escrita
-            //| chamada_procedimento
+            | chamada_procedimento
 ;
 
-//chamada_procedimento: ;
+chamada_procedimento: /*IDENT {
+               l_elem = busca(token,ts);
+               if (l_elem == NULL || l_elem->categ != PR) {
+                  yyerror("Procedimento não declarado");
+               } else {
+                  // Gera código para chamar o procedimento
+                  char buffer[50];
+                  sprintf(buffer, "CHPR %s,%d", l_elem->info.pr.rot, nivel_lexico);
+                  geraCodigo(NULL, buffer);
+               }
+               //ABRE_PARENTESES FECHA_PARENTESES
+            }*/
+;
 
 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
 ;
@@ -265,6 +277,7 @@ termo: termo ASTERISCO fator {
 ;
 
 atribuicao: IDENT {
+   mostra_ts(ts);
     // Busca variável no lado esquerdo
     l_elem = busca(token, ts);
     if (l_elem == NULL) {
diff --git a/teste2.pas b/teste2.pas
index 7c13741..93c6a6a 100644
--- a/teste2.pas
+++ b/teste2.pas
@@ -3,5 +3,5 @@ var a: integer;
     b: integer;
 begin
     a := 5;
-    b := a + 5 * 2;
+    b := b + 5 * 2;
 end.
diff --git a/teste6.pas b/teste6.pas
index 52ee27e..cb2699e 100644
--- a/teste6.pas
+++ b/teste6.pas
@@ -7,4 +7,5 @@ program proc1 (input, output);
     end
 begin
     x := 8;
+    p
 end.
\ No newline at end of file
diff --git a/ts/ts.c b/ts/ts.c
index 12d5051..2fed125 100644
--- a/ts/ts.c
+++ b/ts/ts.c
@@ -75,7 +75,7 @@ void atualiza_tipo(int n, int tipo, ts_t *ts){
 	}
 }
 
-/*void mostra_ts(ts_t *ts) {
+void mostra_ts(ts_t *ts) {
     if (ts == NULL || ts->topo == NULL) {
         printf("Tabela de Símbolos está vazia ou não inicializada.\n");
         return;
@@ -83,34 +83,46 @@ void atualiza_tipo(int n, int tipo, ts_t *ts){
 
     printf("\nTabela de Símbolos:\n");
     printf("----------------------------------------------------------------------------------\n");
-    printf("| %-10s | %-8s | %-8s | %-10s | %-10s |\n", 
-           "Ident", "Categ", "Nivel", "Tipo", "Desloc");
+    printf("| %-10s | %-8s | %-8s | %-10s | %-10s | %-20s |\n", 
+           "Ident", "Categ", "Nivel", "Tipo", "Desloc", "Detalhes");
     printf("----------------------------------------------------------------------------------\n");
 
     simb_t *p = ts->topo;
     while (p != NULL) {
-        // Identificar o tipo como Inteiro, Boolean ou Indefinido
-        const char *tipoStr;
-        switch (p->info.vs.tipo) {
-            case INTEIRO:
-                tipoStr = "Inteiro";
-                break;
-            case BOOLEAN:
-                tipoStr = "Boolean";
-                break;
-            default:
-                tipoStr = "NSEI";
-                break;
+        // Identificar a categoria
+        const char *categStr;
+        const char *tipoStr = "-";
+        char deslocStr[10] = "-";
+        char detalhes[50] = "-";
+
+        if (p->categ == VS) {
+            categStr = "VS";
+            // Determina o tipo como Inteiro, Boolean ou Indefinido
+            switch (p->info.vs.tipo) {
+                case INTEIRO:
+                    tipoStr = "Inteiro";
+                    break;
+                case BOOLEAN:
+                    tipoStr = "Boolean";
+                    break;
+                default:
+                    tipoStr = "NSEI";
+                    break;
+            }
+            sprintf(deslocStr, "%d", p->info.vs.desloc);
+        } else if (p->categ == PR) {
+            categStr = "PR";
+            tipoStr = "-";
+            sprintf(detalhes, "%s, Params: %d", p->info.pr.rot, p->info.pr.quant);
+        } else {
+            categStr = "Outro";
         }
 
-        // Determinar a categoria
-        const char *categStr = (p->categ == VS) ? "VS" : "Outro";
-
-        // Imprimir a entrada
-        printf("| %-10s | %-8s | %-8d | %-10s | %-10d |\n", 
-               p->ident, categStr, p->nivel, tipoStr, p->info.vs.desloc);
+        // Imprime a entrada
+        printf("| %-10s | %-8s | %-8d | %-10s | %-10s | %-20s |\n", 
+               p->ident, categStr, p->nivel, tipoStr, deslocStr, detalhes);
 
         p = p->prox;
     }
     printf("----------------------------------------------------------------------------------\n");
-}*/
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/ts/ts.h b/ts/ts.h
index a3ea8d4..7db1cec 100644
--- a/ts/ts.h
+++ b/ts/ts.h
@@ -49,6 +49,6 @@ void retira(int n, ts_t *ts);
 
 void atualiza_tipo(int n, int tipo, ts_t *ts);
 
-//void mostra_ts(ts_t *ts);
+void mostra_ts(ts_t *ts);
 
 #endif
diff --git a/ts/ts.o b/ts/ts.o
index 45b0d9bc32a2d071f4485b2ad49fcf11a902a84a..49ecde5f0c6f37d09706be2dfb8317baf4653812 100644
GIT binary patch
delta 2162
zcmbOrxkF=u2Gb6Kjan<1>p%0${R;KyeCpABq`{-Jwj;%(n?+TFfq}uJ)Afhp0gvX|
z4u%pQk8alvk8TE!)&r#?9=)s#VEN-OK=ey~CI$vHF?4S88xE*YfKM+kNS6=P5NRmg
zc@V0=qw^4qH93%3tlp#fhyYBW6JjIGF`ce6US=>NS?;>R<GAZKT?Ph*wBxS(7#KW`
zyB+}XJdV4b09opB-1P#Kz5%5lKxwd7(vG`+U|{g*cAe4fz|nf3G{d8}9_m-u1rT9@
z<{ykD?9D%zO88$(!QJJ$;<Y3)hX;u>0jx1V#G}`Bn+L@69-ZerI*;!FSq--Lbr@KU
z14r`@#!`EP-US}L=`j0OfR%VifGCgd00EC)*8?8CrXVv=&EiJZ5Auo!DE4M}bTjyX
zT+m&+!lOHMfd@EBN)Lqjb{_QX{NVu#YX@*xce~E;=yuTX=yaXo(Of%&fxor)-~az`
zL*Y^IBgI1-l2S@o!M-?oc=A=|jCuwJhLFUh)SN_xlvIV_!)tSs@^kWw6;g{!4lh(F
zORUOFRLCz?$UD3^Um-IuGdVLcC$lOsB~g!o3yU@@kpCETNdWc4sbz3UEzZeLW(dhF
z$Y=1&EKAK{a84{qO=s{-NzE$(+seSeP@|x#YiLlc0HQ5WD3~aWHUg>QVsJ^VFG<YF
zNG)d2We5vq@XRYo%`D1iaLUimNlnaS@C$bJWKd0E2nb?OE!I&8NGwXsEw)lnO=0ja
zEh);!Zea@8dYDBp8fqbfyR);Ef<|akX<kXGf}x?_WM39(CI*Jd=`4F0WhSe#%F8G)
zFfbf|`Y4-;fq}u5PoRy-nU{?@iD|MutHS04Rt3h%0o*K;zp#o-ZeU~46=Gmy&|!vX
zNrO-fQ49<WAn{31aj;1Y3=AogKeCE5W`fB=5IK1Rn~!N?Nhvs9<4Zu{o10%;Qj{29
zQp`|LT2jnVTu_vmSCYmMA75OOn4BG-oRJ-$mYA8dS&*HdvHm#J0+35V%oL~t&Vx7%
z3=Av`3=9Gc3=Dt%L%?mQI86O4sQSlHadh>spyDv~TcGMcLB#7ZEcgqNV1Q|eWrXNp
z1)0pi02gP6iu0g}^FhUh(Zq$J;<6~>^$ZM>PziMu2?hpvsJJ1TxDHg@4k`|!K!q$U
zggik4NDhVhI1nlhqTnG~|NsC043G$thBT-JhtR}9g)b;99-xV5L)E`U6EB8}|3VY5
zhKdWaGBAM34|tF^KqVBxr645k1(D+33@Q$bnr5haM>KJm2jbDh+o0-mpyDhb`;jdu
zg-XCIm<rXf22FepRD35?9OOadD7Xz3hnWM5g2zyCka|cI2t!i!cO(g+$)X(1f=56h
z4UH6#F_R`w<halK7pe{{Ir$=&@Z<@c5?m9w!F&b<mdTqq&6sT2CJS<kP2$pkvL-ul
zX>d8PLDXDioLt0Z#w5rwc@>u(qwQozR`E&P8cYrxleM_*I1@M^svb-(<TmHrzz^X~
pn7onOoYR35!aFhfBeyvx2h`4{$%Z`UoDLx0FfcHbO#a9z4*=G9)V=@!

delta 252
zcmdm?F+p;I29p5iMy(ah%nS?+lWo~DCJS+BPj=wg!>BO%FNgf(DMBKf12{DpCr{vF
znS6y)gfV#XL@x2k9Na#l1x1;8C20(aC8dcunN^ALC7A{J44XT-`57l~;IEkMAaH|e
z67ys!K{GB1b_OuuV4NH!XvTDjd9ov?*yI(08ZhPyK@F}OAQvz&Fr+X{mJ%{!vSFDV
zBxJ{w!2(e$qyb`H60+m$U;&%OaA2~eusNp!2ZUEKIa1i1(}NYl%a}Y<*qn0%8-$lQ
S`KGWr*9@r25{AiAf^q=;JUg%e

-- 
GitLab