From 967bf512a858bd5dae2f060f8b84dffbbb71295d Mon Sep 17 00:00:00 2001
From: Henrique Margotte <henriquemargotte@gmail.com>
Date: Thu, 28 Nov 2024 16:29:59 -0300
Subject: [PATCH] if funcionando, dmem adicionado, read e write adicionados

---
 MEPA              |   56 ++-
 compilador        |  Bin 41416 -> 45512 bytes
 compilador.h      |    2 +-
 compilador.l      |   14 +-
 compilador.output | 1100 +++++++++++++++++++++++++++++----------------
 compilador.tab.c  |  482 ++++++++++++--------
 compilador.tab.h  |    5 +-
 compilador.y      |   72 ++-
 lex.yy.c          |  317 +++++++------
 teste5.pas        |   20 +
 10 files changed, 1327 insertions(+), 741 deletions(-)
 create mode 100644 teste5.pas

diff --git a/MEPA b/MEPA
index f41e650..dd41d3f 100644
--- a/MEPA
+++ b/MEPA
@@ -1,29 +1,49 @@
      INPP
      AMEM 2
-     AMEM 3
-     CRCT 0
-     ARMZ 0,2
-     CRCT 1
-     ARMZ 0,3
-     CRCT 1
+     LEIT
      ARMZ 0,1
+     CRCT 0
+     ARMZ 0,0
 R00: NADA 
-     CRVL 0,1
      CRVL 0,0
-     CMEG
-     DSVF R01
-     CRVL 0,3
-     CRVL 0,2
-     SOMA
-     ARMZ 0,4
-     CRVL 0,3
-     ARMZ 0,2
-     CRVL 0,4
-     ARMZ 0,3
      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,1
+     ARMZ 0,0
      DSVS R00
 R01: NADA 
+     DMEM 2
      PARA
diff --git a/compilador b/compilador
index 7f8599f3f7ee14c55ee262e5aaab503a1ab05654..3ee94dfccf57ca4549a0ec2e49fb5de71888f511 100755
GIT binary patch
literal 45512
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

delta 19743
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
UHrjK7W{VgY7^D~{XRVS00G{QyWB>pF

diff --git a/compilador.h b/compilador.h
index 3f1dc0c..5e8d4e8 100644
--- a/compilador.h
+++ b/compilador.h
@@ -16,7 +16,7 @@
 typedef enum simbolos {
   simb_program, simb_var, simb_begin, simb_end,
   simb_identificador, simb_numero,
-  simb_ponto, simb_virgula, simb_ponto_e_virgula, simb_dois_pontos,
+  simb_ponto, simb_virgula, simb_ponto_e_virgula, simb_dois_pontos, simb_read, simb_write,
   simb_atribuicao, simb_abre_parenteses, simb_fecha_parenteses, simb_label, simb_type, simb_array, simb_procedure, simb_function, simb_goto, simb_if, simb_then, simb_else, simb_while, simb_do, simb_or, simb_div, simb_and, simb_not, simb_igual, simb_diferente, simb_menor_igual, simb_maior_igual, simb_menor, simb_maior, simb_mais, simb_menos, simb_asterisco
 } simbolos;
 
diff --git a/compilador.l b/compilador.l
index 1f1f4a3..0629b8c 100644
--- a/compilador.l
+++ b/compilador.l
@@ -70,6 +70,18 @@ end { simbolo = simb_end;
           return T_END;
  }
 
+read { simbolo = simb_read;
+          strncpy (token, yytext, TAM_TOKEN);
+          IMPRIME("read  ");
+          return READ;
+}
+
+write { simbolo = simb_write;
+          strncpy (token, yytext, TAM_TOKEN);
+          IMPRIME("write  ");
+          return WRITE;
+}
+
 := { simbolo = simb_atribuicao;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" atribuicao  ");
@@ -163,7 +175,7 @@ then { simbolo  = simb_then;
 
 else { simbolo  = simb_else;
           strncpy (token, yytext, TAM_TOKEN);
-          IMPRIME("else ");
+          IMPRIME(" else ");
           return ELSE;
  }
 
diff --git a/compilador.output b/compilador.output
index de7b057..1ca2ea0 100644
--- a/compilador.output
+++ b/compilador.output
@@ -5,15 +5,12 @@ Terminais sem uso na gramática
     PROCEDURE
     FUNCTION
     GOTO
-    IF
-    THEN
-    ELSE
     OR
     AND
     NOT
 
 
-Estado 47 conflitos: 1 de redução/redução
+Estado 61 conflitos: 1 de redução/redução
 
 
 Gramática
@@ -70,39 +67,60 @@ Gramática
    29                   | comando_composto
    30                   | comando_condicional
    31                   | comando_repetitivo
+   32                   | leitura
+   33                   | escrita
 
-   32 expressao: expressao IGUAL expressao_simples
-   33          | expressao DIFERENTE expressao_simples
-   34          | expressao MENOR expressao_simples
-   35          | expressao MENOR_IGUAL expressao_simples
-   36          | expressao MAIOR expressao_simples
-   37          | expressao MAIOR_IGUAL expressao_simples
-   38          | expressao_simples
+   34 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
 
-   39 expressao_simples: expressao_simples MAIS termo
-   40                  | expressao_simples MENOS termo
-   41                  | termo
+   35 lista_leituras: lista_leituras VIRGULA simb_leitura
+   36               | simb_leitura
 
-   42 termo: termo ASTERISCO fator
-   43      | termo DIV fator
-   44      | fator
+   37 simb_leitura: IDENT
 
-   45 $@6: ε
+   38 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES
 
-   46 atribuicao: IDENT $@6 ATRIBUICAO expressao_simples
+   39 lista_escritas: lista_escritas VIRGULA expressao_simples
+   40               | expressao_simples
 
-   47 fator: IDENT
-   48      | NUMERO
+   41 expressao: expressao IGUAL expressao_simples
+   42          | expressao DIFERENTE expressao_simples
+   43          | expressao MENOR expressao_simples
+   44          | expressao MENOR_IGUAL expressao_simples
+   45          | expressao MAIOR expressao_simples
+   46          | expressao MAIOR_IGUAL expressao_simples
+   47          | expressao_simples
 
-   49 numero: NUMERO
+   48 expressao_simples: expressao_simples MAIS termo
+   49                  | expressao_simples MENOS termo
+   50                  | termo
 
-   50 $@7: ε
+   51 termo: termo ASTERISCO fator
+   52      | termo DIV fator
+   53      | fator
 
-   51 $@8: ε
+   54 $@6: ε
 
-   52 comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo
+   55 atribuicao: IDENT $@6 ATRIBUICAO expressao_simples
 
-   53 comando_condicional: ε
+   56 fator: IDENT
+   57      | NUMERO
+
+   58 numero: NUMERO
+
+   59 $@7: ε
+
+   60 $@8: ε
+
+   61 comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo
+
+   62 comando_condicional: if_then cond_else
+
+   63 cond_else: ELSE comando_sem_rotulo
+   64          | ε
+
+   65 $@9: ε
+
+   66 if_then: IF expressao $@9 THEN comando_sem_rotulo
 
 
 Terminais, com as regras onde eles aparecem
@@ -110,141 +128,168 @@ Terminais, com as regras onde eles aparecem
     $end (0) 0
     error (256)
     PROGRAM (258) 2
-    ABRE_PARENTESES (259) 2
-    FECHA_PARENTESES (260) 2
-    VIRGULA (261) 5 17 19
+    ABRE_PARENTESES (259) 2 34 38
+    FECHA_PARENTESES (260) 2 34 38
+    VIRGULA (261) 5 17 19 35 39
     PONTO_E_VIRGULA (262) 2 15 23 24
     DOIS_PONTOS (263) 15 26
     PONTO (264) 2
     T_BEGIN (265) 22
     T_END (266) 22
     VAR (267) 9
-    IDENT (268) 2 16 17 18 19 20 46 47
-    ATRIBUICAO (269) 46
+    IDENT (268) 2 16 17 18 19 20 37 55 56
+    ATRIBUICAO (269) 55
     LABEL (270) 5
     TYPE (271)
     ARRAY (272)
     PROCEDURE (273)
     FUNCTION (274)
     GOTO (275)
-    IF (276)
-    THEN (277)
-    ELSE (278)
-    WHILE (279) 52
-    DO (280) 52
+    IF (276) 66
+    THEN (277) 66
+    ELSE (278) 63
+    WHILE (279) 61
+    DO (280) 61
     OR (281)
-    DIV (282) 43
+    DIV (282) 52
     AND (283)
     NOT (284)
-    IGUAL (285) 32
-    DIFERENTE (286) 33
-    MENOR_IGUAL (287) 35
-    MAIOR_IGUAL (288) 37
-    MENOR (289) 34
-    MAIOR (290) 36
-    MAIS (291) 39
-    MENOS (292) 40
-    ASTERISCO (293) 42
-    NUMERO (294) 48 49
+    IGUAL (285) 41
+    DIFERENTE (286) 42
+    MENOR_IGUAL (287) 44
+    MAIOR_IGUAL (288) 46
+    MENOR (289) 43
+    MAIOR (290) 45
+    MAIS (291) 48
+    MENOS (292) 49
+    ASTERISCO (293) 51
+    NUMERO (294) 57 58
+    READ (295) 34
+    WRITE (296) 38
+    LOWER_THAN_ELSE (297)
 
 
 Não terminais com as regras onde eles aparecem
 
-    $accept (40)
+    $accept (43)
         à esquerda: 0
-    programa (41)
+    programa (44)
         à esquerda: 2
         à direita: 0
-    $@1 (42)
+    $@1 (45)
         à esquerda: 1
         à direita: 2
-    bloco (43)
+    bloco (46)
         à esquerda: 4
         à direita: 2
-    $@2 (44)
+    $@2 (47)
         à esquerda: 3
         à direita: 4
-    parte_declara_rotulos (45)
+    parte_declara_rotulos (48)
         à esquerda: 5 6
         à direita: 4
-    parte_declara_vars (46)
+    parte_declara_vars (49)
         à esquerda: 7
         à direita: 4
-    var (47)
+    var (50)
         à esquerda: 9 10
         à direita: 7
-    $@3 (48)
+    $@3 (51)
         à esquerda: 8
         à direita: 9
-    declara_vars (49)
+    declara_vars (52)
         à esquerda: 11 12
         à direita: 9 11
-    declara_var (50)
+    declara_var (53)
         à esquerda: 15
         à direita: 11 12
-    $@4 (51)
+    $@4 (54)
         à esquerda: 13
         à direita: 15
-    $@5 (52)
+    $@5 (55)
         à esquerda: 14
         à direita: 15
-    tipo (53)
+    tipo (56)
         à esquerda: 16
         à direita: 15
-    lista_id_var (54)
+    lista_id_var (57)
         à esquerda: 17 18
         à direita: 15 17
-    lista_idents (55)
+    lista_idents (58)
         à esquerda: 19 20
         à direita: 2 19
-    parte_declara_subrotinas (56)
+    parte_declara_subrotinas (59)
         à esquerda: 21
         à direita: 4
-    comando_composto (57)
+    comando_composto (60)
         à esquerda: 22
         à direita: 4 29
-    comandos (58)
+    comandos (61)
         à esquerda: 23 24 25
         à direita: 22 23
-    comando (59)
+    comando (62)
         à esquerda: 26 27
         à direita: 23 24
-    comando_sem_rotulo (60)
-        à esquerda: 28 29 30 31
-        à direita: 26 27 52
-    expressao (61)
-        à esquerda: 32 33 34 35 36 37 38
-        à direita: 32 33 34 35 36 37 52
-    expressao_simples (62)
-        à esquerda: 39 40 41
-        à direita: 32 33 34 35 36 37 38 39 40 46
-    termo (63)
-        à esquerda: 42 43 44
-        à direita: 39 40 41 42 43
-    atribuicao (64)
-        à esquerda: 46
+    comando_sem_rotulo (63)
+        à esquerda: 28 29 30 31 32 33
+        à direita: 26 27 61 63 66
+    leitura (64)
+        à esquerda: 34
+        à direita: 32
+    lista_leituras (65)
+        à esquerda: 35 36
+        à direita: 34 35
+    simb_leitura (66)
+        à esquerda: 37
+        à direita: 35 36
+    escrita (67)
+        à esquerda: 38
+        à direita: 33
+    lista_escritas (68)
+        à esquerda: 39 40
+        à direita: 38 39
+    expressao (69)
+        à esquerda: 41 42 43 44 45 46 47
+        à direita: 41 42 43 44 45 46 61 66
+    expressao_simples (70)
+        à esquerda: 48 49 50
+        à direita: 39 40 41 42 43 44 45 46 47 48 49 55
+    termo (71)
+        à esquerda: 51 52 53
+        à direita: 48 49 50 51 52
+    atribuicao (72)
+        à esquerda: 55
         à direita: 28
-    $@6 (65)
-        à esquerda: 45
-        à direita: 46
-    fator (66)
-        à esquerda: 47 48
-        à direita: 42 43 44
-    numero (67)
-        à esquerda: 49
+    $@6 (73)
+        à esquerda: 54
+        à direita: 55
+    fator (74)
+        à esquerda: 56 57
+        à direita: 51 52 53
+    numero (75)
+        à esquerda: 58
         à direita: 26
-    comando_repetitivo (68)
-        à esquerda: 52
+    comando_repetitivo (76)
+        à esquerda: 61
         à direita: 31
-    $@7 (69)
-        à esquerda: 50
-        à direita: 52
-    $@8 (70)
-        à esquerda: 51
-        à direita: 52
-    comando_condicional (71)
-        à esquerda: 53
+    $@7 (77)
+        à esquerda: 59
+        à direita: 61
+    $@8 (78)
+        à esquerda: 60
+        à direita: 61
+    comando_condicional (79)
+        à esquerda: 62
         à direita: 30
+    cond_else (80)
+        à esquerda: 63 64
+        à direita: 62
+    if_then (81)
+        à esquerda: 66
+        à direita: 62
+    $@9 (82)
+        à esquerda: 65
+        à direita: 66
 
 
 Estado 0
@@ -476,21 +521,26 @@ Estado 27
 
     T_BEGIN  deslocar, e ir ao estado 27
     IDENT    deslocar, e ir ao estado 32
-    NUMERO   deslocar, e ir ao estado 33
-
-    PONTO_E_VIRGULA  reduzir usando a regra 53 (comando_condicional)
-    WHILE            reduzir usando a regra 50 ($@7)
-    $padrão          reduzir usando a regra 25 (comandos)
-
-    comando_composto     ir ao estado 34
-    comandos             ir ao estado 35
-    comando              ir ao estado 36
-    comando_sem_rotulo   ir ao estado 37
-    atribuicao           ir ao estado 38
-    numero               ir ao estado 39
-    comando_repetitivo   ir ao estado 40
-    $@7                  ir ao estado 41
-    comando_condicional  ir ao estado 42
+    IF       deslocar, e ir ao estado 33
+    NUMERO   deslocar, e ir ao estado 34
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
+
+    WHILE    reduzir usando a regra 59 ($@7)
+    $padrão  reduzir usando a regra 25 (comandos)
+
+    comando_composto     ir ao estado 37
+    comandos             ir ao estado 38
+    comando              ir ao estado 39
+    comando_sem_rotulo   ir ao estado 40
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    numero               ir ao estado 44
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
 
 
 Estado 28
@@ -519,569 +569,853 @@ Estado 31
    15 declara_var: $@4 lista_id_var • DOIS_PONTOS tipo $@5 PONTO_E_VIRGULA
    17 lista_id_var: lista_id_var • VIRGULA IDENT
 
-    VIRGULA      deslocar, e ir ao estado 43
-    DOIS_PONTOS  deslocar, e ir ao estado 44
+    VIRGULA      deslocar, e ir ao estado 49
+    DOIS_PONTOS  deslocar, e ir ao estado 50
 
 
 Estado 32
 
-   46 atribuicao: IDENT • $@6 ATRIBUICAO expressao_simples
+   55 atribuicao: IDENT • $@6 ATRIBUICAO expressao_simples
 
-    $padrão  reduzir usando a regra 45 ($@6)
+    $padrão  reduzir usando a regra 54 ($@6)
 
-    $@6  ir ao estado 45
+    $@6  ir ao estado 51
 
 
 Estado 33
 
-   49 numero: NUMERO •
+   66 if_then: IF • expressao $@9 THEN comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 49 (numero)
+    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
 
 
 Estado 34
 
-   29 comando_sem_rotulo: comando_composto •
+   58 numero: NUMERO •
 
-    $padrão  reduzir usando a regra 29 (comando_sem_rotulo)
+    $padrão  reduzir usando a regra 58 (numero)
 
 
 Estado 35
 
-   22 comando_composto: T_BEGIN comandos • T_END
+   34 leitura: READ • ABRE_PARENTESES lista_leituras FECHA_PARENTESES
 
-    T_END  deslocar, e ir ao estado 46
+    ABRE_PARENTESES  deslocar, e ir ao estado 58
 
 
 Estado 36
 
-   23 comandos: comando • PONTO_E_VIRGULA comandos
-   24         | comando • PONTO_E_VIRGULA
+   38 escrita: WRITE • ABRE_PARENTESES lista_escritas FECHA_PARENTESES
 
-    PONTO_E_VIRGULA  deslocar, e ir ao estado 47
+    ABRE_PARENTESES  deslocar, e ir ao estado 59
 
 
 Estado 37
 
-   27 comando: comando_sem_rotulo •
+   29 comando_sem_rotulo: comando_composto •
 
-    $padrão  reduzir usando a regra 27 (comando)
+    $padrão  reduzir usando a regra 29 (comando_sem_rotulo)
 
 
 Estado 38
 
-   28 comando_sem_rotulo: atribuicao •
+   22 comando_composto: T_BEGIN comandos • T_END
 
-    $padrão  reduzir usando a regra 28 (comando_sem_rotulo)
+    T_END  deslocar, e ir ao estado 60
 
 
 Estado 39
 
-   26 comando: numero • DOIS_PONTOS comando_sem_rotulo
+   23 comandos: comando • PONTO_E_VIRGULA comandos
+   24         | comando • PONTO_E_VIRGULA
 
-    DOIS_PONTOS  deslocar, e ir ao estado 48
+    PONTO_E_VIRGULA  deslocar, e ir ao estado 61
 
 
 Estado 40
 
-   31 comando_sem_rotulo: comando_repetitivo •
+   27 comando: comando_sem_rotulo •
 
-    $padrão  reduzir usando a regra 31 (comando_sem_rotulo)
+    $padrão  reduzir usando a regra 27 (comando)
 
 
 Estado 41
 
-   52 comando_repetitivo: $@7 • WHILE expressao DO $@8 comando_sem_rotulo
+   32 comando_sem_rotulo: leitura •
 
-    WHILE  deslocar, e ir ao estado 49
+    $padrão  reduzir usando a regra 32 (comando_sem_rotulo)
 
 
 Estado 42
 
-   30 comando_sem_rotulo: comando_condicional •
+   33 comando_sem_rotulo: escrita •
 
-    $padrão  reduzir usando a regra 30 (comando_sem_rotulo)
+    $padrão  reduzir usando a regra 33 (comando_sem_rotulo)
 
 
 Estado 43
 
-   17 lista_id_var: lista_id_var VIRGULA • IDENT
+   28 comando_sem_rotulo: atribuicao •
 
-    IDENT  deslocar, e ir ao estado 50
+    $padrão  reduzir usando a regra 28 (comando_sem_rotulo)
 
 
 Estado 44
 
-   15 declara_var: $@4 lista_id_var DOIS_PONTOS • tipo $@5 PONTO_E_VIRGULA
-
-    IDENT  deslocar, e ir ao estado 51
+   26 comando: numero • DOIS_PONTOS comando_sem_rotulo
 
-    tipo  ir ao estado 52
+    DOIS_PONTOS  deslocar, e ir ao estado 62
 
 
 Estado 45
 
-   46 atribuicao: IDENT $@6 • ATRIBUICAO expressao_simples
+   31 comando_sem_rotulo: comando_repetitivo •
 
-    ATRIBUICAO  deslocar, e ir ao estado 53
+    $padrão  reduzir usando a regra 31 (comando_sem_rotulo)
 
 
 Estado 46
 
-   22 comando_composto: T_BEGIN comandos T_END •
+   61 comando_repetitivo: $@7 • WHILE expressao DO $@8 comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 22 (comando_composto)
+    WHILE  deslocar, e ir ao estado 63
 
 
 Estado 47
 
-   23 comandos: comando PONTO_E_VIRGULA • comandos
-   24         | comando PONTO_E_VIRGULA •
-
-    T_BEGIN  deslocar, e ir ao estado 27
-    IDENT    deslocar, e ir ao estado 32
-    NUMERO   deslocar, e ir ao estado 33
-
-    PONTO_E_VIRGULA  reduzir usando a regra 53 (comando_condicional)
-    T_END            reduzir usando a regra 24 (comandos)
-    T_END            [reduzir usando a regra 25 (comandos)]
-    WHILE            reduzir usando a regra 50 ($@7)
-    $padrão          reduzir usando a regra 24 (comandos)
+   30 comando_sem_rotulo: comando_condicional •
 
-    comando_composto     ir ao estado 34
-    comandos             ir ao estado 54
-    comando              ir ao estado 36
-    comando_sem_rotulo   ir ao estado 37
-    atribuicao           ir ao estado 38
-    numero               ir ao estado 39
-    comando_repetitivo   ir ao estado 40
-    $@7                  ir ao estado 41
-    comando_condicional  ir ao estado 42
+    $padrão  reduzir usando a regra 30 (comando_sem_rotulo)
 
 
 Estado 48
 
-   26 comando: numero DOIS_PONTOS • comando_sem_rotulo
+   62 comando_condicional: if_then • cond_else
 
-    T_BEGIN  deslocar, e ir ao estado 27
-    IDENT    deslocar, e ir ao estado 32
+    ELSE  deslocar, e ir ao estado 64
 
-    PONTO_E_VIRGULA  reduzir usando a regra 53 (comando_condicional)
-    $padrão          reduzir usando a regra 50 ($@7)
+    $padrão  reduzir usando a regra 64 (cond_else)
 
-    comando_composto     ir ao estado 34
-    comando_sem_rotulo   ir ao estado 55
-    atribuicao           ir ao estado 38
-    comando_repetitivo   ir ao estado 40
-    $@7                  ir ao estado 41
-    comando_condicional  ir ao estado 42
+    cond_else  ir ao estado 65
 
 
 Estado 49
 
-   52 comando_repetitivo: $@7 WHILE • expressao DO $@8 comando_sem_rotulo
-
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+   17 lista_id_var: lista_id_var VIRGULA • IDENT
 
-    expressao          ir ao estado 58
-    expressao_simples  ir ao estado 59
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    IDENT  deslocar, e ir ao estado 66
 
 
 Estado 50
 
-   17 lista_id_var: lista_id_var VIRGULA IDENT •
+   15 declara_var: $@4 lista_id_var DOIS_PONTOS • tipo $@5 PONTO_E_VIRGULA
 
-    $padrão  reduzir usando a regra 17 (lista_id_var)
+    IDENT  deslocar, e ir ao estado 67
+
+    tipo  ir ao estado 68
 
 
 Estado 51
 
-   16 tipo: IDENT •
+   55 atribuicao: IDENT $@6 • ATRIBUICAO expressao_simples
 
-    $padrão  reduzir usando a regra 16 (tipo)
+    ATRIBUICAO  deslocar, e ir ao estado 69
 
 
 Estado 52
 
-   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo • $@5 PONTO_E_VIRGULA
+   56 fator: IDENT •
 
-    $padrão  reduzir usando a regra 14 ($@5)
-
-    $@5  ir ao estado 62
+    $padrão  reduzir usando a regra 56 (fator)
 
 
 Estado 53
 
-   46 atribuicao: IDENT $@6 ATRIBUICAO • expressao_simples
+   57 fator: NUMERO •
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
-
-    expressao_simples  ir ao estado 63
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    $padrão  reduzir usando a regra 57 (fator)
 
 
 Estado 54
 
-   23 comandos: comando PONTO_E_VIRGULA comandos •
+   41 expressao: expressao • IGUAL expressao_simples
+   42          | expressao • DIFERENTE expressao_simples
+   43          | expressao • MENOR expressao_simples
+   44          | expressao • MENOR_IGUAL expressao_simples
+   45          | expressao • MAIOR expressao_simples
+   46          | expressao • MAIOR_IGUAL expressao_simples
+   66 if_then: IF expressao • $@9 THEN comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 23 (comandos)
+    IGUAL        deslocar, e ir ao estado 70
+    DIFERENTE    deslocar, e ir ao estado 71
+    MENOR_IGUAL  deslocar, e ir ao estado 72
+    MAIOR_IGUAL  deslocar, e ir ao estado 73
+    MENOR        deslocar, e ir ao estado 74
+    MAIOR        deslocar, e ir ao estado 75
+
+    $padrão  reduzir usando a regra 65 ($@9)
+
+    $@9  ir ao estado 76
 
 
 Estado 55
 
-   26 comando: numero DOIS_PONTOS comando_sem_rotulo •
+   47 expressao: expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
 
-    $padrão  reduzir usando a regra 26 (comando)
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 47 (expressao)
 
 
 Estado 56
 
-   47 fator: IDENT •
+   50 expressao_simples: termo •
+   51 termo: termo • ASTERISCO fator
+   52      | termo • DIV fator
 
-    $padrão  reduzir usando a regra 47 (fator)
+    DIV        deslocar, e ir ao estado 79
+    ASTERISCO  deslocar, e ir ao estado 80
+
+    $padrão  reduzir usando a regra 50 (expressao_simples)
 
 
 Estado 57
 
-   48 fator: NUMERO •
+   53 termo: fator •
 
-    $padrão  reduzir usando a regra 48 (fator)
+    $padrão  reduzir usando a regra 53 (termo)
 
 
 Estado 58
 
-   32 expressao: expressao • IGUAL expressao_simples
-   33          | expressao • DIFERENTE expressao_simples
-   34          | expressao • MENOR expressao_simples
-   35          | expressao • MENOR_IGUAL expressao_simples
-   36          | expressao • MAIOR expressao_simples
-   37          | expressao • MAIOR_IGUAL expressao_simples
-   52 comando_repetitivo: $@7 WHILE expressao • DO $@8 comando_sem_rotulo
+   34 leitura: READ ABRE_PARENTESES • lista_leituras FECHA_PARENTESES
+
+    IDENT  deslocar, e ir ao estado 81
 
-    DO           deslocar, e ir ao estado 64
-    IGUAL        deslocar, e ir ao estado 65
-    DIFERENTE    deslocar, e ir ao estado 66
-    MENOR_IGUAL  deslocar, e ir ao estado 67
-    MAIOR_IGUAL  deslocar, e ir ao estado 68
-    MENOR        deslocar, e ir ao estado 69
-    MAIOR        deslocar, e ir ao estado 70
+    lista_leituras  ir ao estado 82
+    simb_leitura    ir ao estado 83
 
 
 Estado 59
 
-   38 expressao: expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   38 escrita: WRITE ABRE_PARENTESES • lista_escritas FECHA_PARENTESES
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 38 (expressao)
+    lista_escritas     ir ao estado 84
+    expressao_simples  ir ao estado 85
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 60
 
-   41 expressao_simples: termo •
-   42 termo: termo • ASTERISCO fator
-   43      | termo • DIV fator
-
-    DIV        deslocar, e ir ao estado 73
-    ASTERISCO  deslocar, e ir ao estado 74
+   22 comando_composto: T_BEGIN comandos T_END •
 
-    $padrão  reduzir usando a regra 41 (expressao_simples)
+    $padrão  reduzir usando a regra 22 (comando_composto)
 
 
 Estado 61
 
-   44 termo: fator •
+   23 comandos: comando PONTO_E_VIRGULA • comandos
+   24         | comando PONTO_E_VIRGULA •
 
-    $padrão  reduzir usando a regra 44 (termo)
+    T_BEGIN  deslocar, e ir ao estado 27
+    IDENT    deslocar, e ir ao estado 32
+    IF       deslocar, e ir ao estado 33
+    NUMERO   deslocar, e ir ao estado 34
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
+
+    T_END    reduzir usando a regra 24 (comandos)
+    T_END    [reduzir usando a regra 25 (comandos)]
+    WHILE    reduzir usando a regra 59 ($@7)
+    $padrão  reduzir usando a regra 24 (comandos)
+
+    comando_composto     ir ao estado 37
+    comandos             ir ao estado 86
+    comando              ir ao estado 39
+    comando_sem_rotulo   ir ao estado 40
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    numero               ir ao estado 44
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
 
 
 Estado 62
 
-   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo $@5 • PONTO_E_VIRGULA
+   26 comando: numero DOIS_PONTOS • comando_sem_rotulo
 
-    PONTO_E_VIRGULA  deslocar, e ir ao estado 75
+    T_BEGIN  deslocar, e ir ao estado 27
+    IDENT    deslocar, e ir ao estado 32
+    IF       deslocar, e ir ao estado 33
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
+
+    $padrão  reduzir usando a regra 59 ($@7)
+
+    comando_composto     ir ao estado 37
+    comando_sem_rotulo   ir ao estado 87
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
 
 
 Estado 63
 
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
-   46 atribuicao: IDENT $@6 ATRIBUICAO expressao_simples •
+   61 comando_repetitivo: $@7 WHILE • expressao DO $@8 comando_sem_rotulo
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 46 (atribuicao)
+    expressao          ir ao estado 88
+    expressao_simples  ir ao estado 55
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 64
 
-   52 comando_repetitivo: $@7 WHILE expressao DO • $@8 comando_sem_rotulo
+   63 cond_else: ELSE • comando_sem_rotulo
 
-    $padrão  reduzir usando a regra 51 ($@8)
+    T_BEGIN  deslocar, e ir ao estado 27
+    IDENT    deslocar, e ir ao estado 32
+    IF       deslocar, e ir ao estado 33
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
 
-    $@8  ir ao estado 76
+    $padrão  reduzir usando a regra 59 ($@7)
 
+    comando_composto     ir ao estado 37
+    comando_sem_rotulo   ir ao estado 89
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
 
-Estado 65
 
-   32 expressao: expressao IGUAL • expressao_simples
+Estado 65
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+   62 comando_condicional: if_then cond_else •
 
-    expressao_simples  ir ao estado 77
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    $padrão  reduzir usando a regra 62 (comando_condicional)
 
 
 Estado 66
 
-   33 expressao: expressao DIFERENTE • expressao_simples
-
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+   17 lista_id_var: lista_id_var VIRGULA IDENT •
 
-    expressao_simples  ir ao estado 78
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    $padrão  reduzir usando a regra 17 (lista_id_var)
 
 
 Estado 67
 
-   35 expressao: expressao MENOR_IGUAL • expressao_simples
-
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+   16 tipo: IDENT •
 
-    expressao_simples  ir ao estado 79
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    $padrão  reduzir usando a regra 16 (tipo)
 
 
 Estado 68
 
-   37 expressao: expressao MAIOR_IGUAL • expressao_simples
+   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo • $@5 PONTO_E_VIRGULA
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    $padrão  reduzir usando a regra 14 ($@5)
 
-    expressao_simples  ir ao estado 80
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    $@5  ir ao estado 90
 
 
 Estado 69
 
-   34 expressao: expressao MENOR • expressao_simples
+   55 atribuicao: IDENT $@6 ATRIBUICAO • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    expressao_simples  ir ao estado 81
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    expressao_simples  ir ao estado 91
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 70
 
-   36 expressao: expressao MAIOR • expressao_simples
+   41 expressao: expressao IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    expressao_simples  ir ao estado 82
-    termo              ir ao estado 60
-    fator              ir ao estado 61
+    expressao_simples  ir ao estado 92
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 71
 
-   39 expressao_simples: expressao_simples MAIS • termo
+   42 expressao: expressao DIFERENTE • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    termo  ir ao estado 83
-    fator  ir ao estado 61
+    expressao_simples  ir ao estado 93
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 72
 
-   40 expressao_simples: expressao_simples MENOS • termo
+   44 expressao: expressao MENOR_IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    termo  ir ao estado 84
-    fator  ir ao estado 61
+    expressao_simples  ir ao estado 94
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 73
 
-   43 termo: termo DIV • fator
+   46 expressao: expressao MAIOR_IGUAL • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    fator  ir ao estado 85
+    expressao_simples  ir ao estado 95
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 74
 
-   42 termo: termo ASTERISCO • fator
+   43 expressao: expressao MENOR • expressao_simples
 
-    IDENT   deslocar, e ir ao estado 56
-    NUMERO  deslocar, e ir ao estado 57
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    fator  ir ao estado 86
+    expressao_simples  ir ao estado 96
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
 
 Estado 75
 
-   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo $@5 PONTO_E_VIRGULA •
-
-    $padrão  reduzir usando a regra 15 (declara_var)
+   45 expressao: expressao MAIOR • expressao_simples
 
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-Estado 76
+    expressao_simples  ir ao estado 97
+    termo              ir ao estado 56
+    fator              ir ao estado 57
 
-   52 comando_repetitivo: $@7 WHILE expressao DO $@8 • comando_sem_rotulo
 
-    T_BEGIN  deslocar, e ir ao estado 27
-    IDENT    deslocar, e ir ao estado 32
+Estado 76
 
-    PONTO_E_VIRGULA  reduzir usando a regra 53 (comando_condicional)
-    $padrão          reduzir usando a regra 50 ($@7)
+   66 if_then: IF expressao $@9 • THEN comando_sem_rotulo
 
-    comando_composto     ir ao estado 34
-    comando_sem_rotulo   ir ao estado 87
-    atribuicao           ir ao estado 38
-    comando_repetitivo   ir ao estado 40
-    $@7                  ir ao estado 41
-    comando_condicional  ir ao estado 42
+    THEN  deslocar, e ir ao estado 98
 
 
 Estado 77
 
-   32 expressao: expressao IGUAL expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   48 expressao_simples: expressao_simples MAIS • termo
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 32 (expressao)
+    termo  ir ao estado 99
+    fator  ir ao estado 57
 
 
 Estado 78
 
-   33 expressao: expressao DIFERENTE expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   49 expressao_simples: expressao_simples MENOS • termo
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 33 (expressao)
+    termo  ir ao estado 100
+    fator  ir ao estado 57
 
 
 Estado 79
 
-   35 expressao: expressao MENOR_IGUAL expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   52 termo: termo DIV • fator
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 35 (expressao)
+    fator  ir ao estado 101
 
 
 Estado 80
 
-   37 expressao: expressao MAIOR_IGUAL expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   51 termo: termo ASTERISCO • fator
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
 
-    $padrão  reduzir usando a regra 37 (expressao)
+    fator  ir ao estado 102
 
 
 Estado 81
 
-   34 expressao: expressao MENOR expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
+   37 simb_leitura: IDENT •
 
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
-
-    $padrão  reduzir usando a regra 34 (expressao)
+    $padrão  reduzir usando a regra 37 (simb_leitura)
 
 
 Estado 82
 
-   36 expressao: expressao MAIOR expressao_simples •
-   39 expressao_simples: expressao_simples • MAIS termo
-   40                  | expressao_simples • MENOS termo
-
-    MAIS   deslocar, e ir ao estado 71
-    MENOS  deslocar, e ir ao estado 72
+   34 leitura: READ ABRE_PARENTESES lista_leituras • FECHA_PARENTESES
+   35 lista_leituras: lista_leituras • VIRGULA simb_leitura
 
-    $padrão  reduzir usando a regra 36 (expressao)
+    FECHA_PARENTESES  deslocar, e ir ao estado 103
+    VIRGULA           deslocar, e ir ao estado 104
 
 
 Estado 83
 
-   39 expressao_simples: expressao_simples MAIS termo •
-   42 termo: termo • ASTERISCO fator
-   43      | termo • DIV fator
+   36 lista_leituras: simb_leitura •
 
-    DIV        deslocar, e ir ao estado 73
-    ASTERISCO  deslocar, e ir ao estado 74
-
-    $padrão  reduzir usando a regra 39 (expressao_simples)
+    $padrão  reduzir usando a regra 36 (lista_leituras)
 
 
 Estado 84
 
-   40 expressao_simples: expressao_simples MENOS termo •
-   42 termo: termo • ASTERISCO fator
-   43      | termo • DIV fator
-
-    DIV        deslocar, e ir ao estado 73
-    ASTERISCO  deslocar, e ir ao estado 74
+   38 escrita: WRITE ABRE_PARENTESES lista_escritas • FECHA_PARENTESES
+   39 lista_escritas: lista_escritas • VIRGULA expressao_simples
 
-    $padrão  reduzir usando a regra 40 (expressao_simples)
+    FECHA_PARENTESES  deslocar, e ir ao estado 105
+    VIRGULA           deslocar, e ir ao estado 106
 
 
 Estado 85
 
-   43 termo: termo DIV fator •
+   40 lista_escritas: expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
 
-    $padrão  reduzir usando a regra 43 (termo)
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 40 (lista_escritas)
 
 
 Estado 86
 
-   42 termo: termo ASTERISCO fator •
+   23 comandos: comando PONTO_E_VIRGULA comandos •
 
-    $padrão  reduzir usando a regra 42 (termo)
+    $padrão  reduzir usando a regra 23 (comandos)
 
 
 Estado 87
 
-   52 comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo •
+   26 comando: numero DOIS_PONTOS comando_sem_rotulo •
+
+    $padrão  reduzir usando a regra 26 (comando)
+
+
+Estado 88
+
+   41 expressao: expressao • IGUAL expressao_simples
+   42          | expressao • DIFERENTE expressao_simples
+   43          | expressao • MENOR expressao_simples
+   44          | expressao • MENOR_IGUAL expressao_simples
+   45          | expressao • MAIOR expressao_simples
+   46          | expressao • MAIOR_IGUAL expressao_simples
+   61 comando_repetitivo: $@7 WHILE expressao • DO $@8 comando_sem_rotulo
+
+    DO           deslocar, e ir ao estado 107
+    IGUAL        deslocar, e ir ao estado 70
+    DIFERENTE    deslocar, e ir ao estado 71
+    MENOR_IGUAL  deslocar, e ir ao estado 72
+    MAIOR_IGUAL  deslocar, e ir ao estado 73
+    MENOR        deslocar, e ir ao estado 74
+    MAIOR        deslocar, e ir ao estado 75
+
+
+Estado 89
+
+   63 cond_else: ELSE comando_sem_rotulo •
+
+    $padrão  reduzir usando a regra 63 (cond_else)
+
+
+Estado 90
+
+   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo $@5 • PONTO_E_VIRGULA
+
+    PONTO_E_VIRGULA  deslocar, e ir ao estado 108
+
+
+Estado 91
+
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+   55 atribuicao: IDENT $@6 ATRIBUICAO expressao_simples •
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 55 (atribuicao)
+
+
+Estado 92
+
+   41 expressao: expressao IGUAL expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 41 (expressao)
+
+
+Estado 93
+
+   42 expressao: expressao DIFERENTE expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 42 (expressao)
+
+
+Estado 94
+
+   44 expressao: expressao MENOR_IGUAL expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 44 (expressao)
+
+
+Estado 95
+
+   46 expressao: expressao MAIOR_IGUAL expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 46 (expressao)
+
+
+Estado 96
+
+   43 expressao: expressao MENOR expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 43 (expressao)
+
+
+Estado 97
+
+   45 expressao: expressao MAIOR expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 45 (expressao)
+
+
+Estado 98
+
+   66 if_then: IF expressao $@9 THEN • comando_sem_rotulo
+
+    T_BEGIN  deslocar, e ir ao estado 27
+    IDENT    deslocar, e ir ao estado 32
+    IF       deslocar, e ir ao estado 33
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
+
+    $padrão  reduzir usando a regra 59 ($@7)
+
+    comando_composto     ir ao estado 37
+    comando_sem_rotulo   ir ao estado 109
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
+
+
+Estado 99
+
+   48 expressao_simples: expressao_simples MAIS termo •
+   51 termo: termo • ASTERISCO fator
+   52      | termo • DIV fator
+
+    DIV        deslocar, e ir ao estado 79
+    ASTERISCO  deslocar, e ir ao estado 80
+
+    $padrão  reduzir usando a regra 48 (expressao_simples)
+
+
+Estado 100
+
+   49 expressao_simples: expressao_simples MENOS termo •
+   51 termo: termo • ASTERISCO fator
+   52      | termo • DIV fator
+
+    DIV        deslocar, e ir ao estado 79
+    ASTERISCO  deslocar, e ir ao estado 80
+
+    $padrão  reduzir usando a regra 49 (expressao_simples)
+
+
+Estado 101
+
+   52 termo: termo DIV fator •
+
+    $padrão  reduzir usando a regra 52 (termo)
+
+
+Estado 102
+
+   51 termo: termo ASTERISCO fator •
+
+    $padrão  reduzir usando a regra 51 (termo)
+
+
+Estado 103
+
+   34 leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES •
+
+    $padrão  reduzir usando a regra 34 (leitura)
+
+
+Estado 104
+
+   35 lista_leituras: lista_leituras VIRGULA • simb_leitura
+
+    IDENT  deslocar, e ir ao estado 81
+
+    simb_leitura  ir ao estado 110
+
+
+Estado 105
+
+   38 escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES •
+
+    $padrão  reduzir usando a regra 38 (escrita)
+
+
+Estado 106
+
+   39 lista_escritas: lista_escritas VIRGULA • expressao_simples
+
+    IDENT   deslocar, e ir ao estado 52
+    NUMERO  deslocar, e ir ao estado 53
+
+    expressao_simples  ir ao estado 111
+    termo              ir ao estado 56
+    fator              ir ao estado 57
+
+
+Estado 107
+
+   61 comando_repetitivo: $@7 WHILE expressao DO • $@8 comando_sem_rotulo
+
+    $padrão  reduzir usando a regra 60 ($@8)
+
+    $@8  ir ao estado 112
+
+
+Estado 108
+
+   15 declara_var: $@4 lista_id_var DOIS_PONTOS tipo $@5 PONTO_E_VIRGULA •
+
+    $padrão  reduzir usando a regra 15 (declara_var)
+
+
+Estado 109
+
+   66 if_then: IF expressao $@9 THEN comando_sem_rotulo •
+
+    $padrão  reduzir usando a regra 66 (if_then)
+
+
+Estado 110
+
+   35 lista_leituras: lista_leituras VIRGULA simb_leitura •
+
+    $padrão  reduzir usando a regra 35 (lista_leituras)
+
+
+Estado 111
+
+   39 lista_escritas: lista_escritas VIRGULA expressao_simples •
+   48 expressao_simples: expressao_simples • MAIS termo
+   49                  | expressao_simples • MENOS termo
+
+    MAIS   deslocar, e ir ao estado 77
+    MENOS  deslocar, e ir ao estado 78
+
+    $padrão  reduzir usando a regra 39 (lista_escritas)
+
+
+Estado 112
+
+   61 comando_repetitivo: $@7 WHILE expressao DO $@8 • comando_sem_rotulo
+
+    T_BEGIN  deslocar, e ir ao estado 27
+    IDENT    deslocar, e ir ao estado 32
+    IF       deslocar, e ir ao estado 33
+    READ     deslocar, e ir ao estado 35
+    WRITE    deslocar, e ir ao estado 36
+
+    $padrão  reduzir usando a regra 59 ($@7)
+
+    comando_composto     ir ao estado 37
+    comando_sem_rotulo   ir ao estado 113
+    leitura              ir ao estado 41
+    escrita              ir ao estado 42
+    atribuicao           ir ao estado 43
+    comando_repetitivo   ir ao estado 45
+    $@7                  ir ao estado 46
+    comando_condicional  ir ao estado 47
+    if_then              ir ao estado 48
+
+
+Estado 113
+
+   61 comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo •
 
-    $padrão  reduzir usando a regra 52 (comando_repetitivo)
+    $padrão  reduzir usando a regra 61 (comando_repetitivo)
diff --git a/compilador.tab.c b/compilador.tab.c
index 7b59a30..2a3cec5 100644
--- a/compilador.tab.c
+++ b/compilador.tab.c
@@ -156,38 +156,49 @@ enum yysymbol_kind_t
   YYSYMBOL_MENOS = 37,                     /* MENOS  */
   YYSYMBOL_ASTERISCO = 38,                 /* ASTERISCO  */
   YYSYMBOL_NUMERO = 39,                    /* NUMERO  */
-  YYSYMBOL_YYACCEPT = 40,                  /* $accept  */
-  YYSYMBOL_programa = 41,                  /* programa  */
-  YYSYMBOL_42_1 = 42,                      /* $@1  */
-  YYSYMBOL_bloco = 43,                     /* bloco  */
-  YYSYMBOL_44_2 = 44,                      /* $@2  */
-  YYSYMBOL_parte_declara_rotulos = 45,     /* parte_declara_rotulos  */
-  YYSYMBOL_parte_declara_vars = 46,        /* parte_declara_vars  */
-  YYSYMBOL_var = 47,                       /* var  */
-  YYSYMBOL_48_3 = 48,                      /* $@3  */
-  YYSYMBOL_declara_vars = 49,              /* declara_vars  */
-  YYSYMBOL_declara_var = 50,               /* declara_var  */
-  YYSYMBOL_51_4 = 51,                      /* $@4  */
-  YYSYMBOL_52_5 = 52,                      /* $@5  */
-  YYSYMBOL_tipo = 53,                      /* tipo  */
-  YYSYMBOL_lista_id_var = 54,              /* lista_id_var  */
-  YYSYMBOL_lista_idents = 55,              /* lista_idents  */
-  YYSYMBOL_parte_declara_subrotinas = 56,  /* parte_declara_subrotinas  */
-  YYSYMBOL_comando_composto = 57,          /* comando_composto  */
-  YYSYMBOL_comandos = 58,                  /* comandos  */
-  YYSYMBOL_comando = 59,                   /* comando  */
-  YYSYMBOL_comando_sem_rotulo = 60,        /* comando_sem_rotulo  */
-  YYSYMBOL_expressao = 61,                 /* expressao  */
-  YYSYMBOL_expressao_simples = 62,         /* expressao_simples  */
-  YYSYMBOL_termo = 63,                     /* termo  */
-  YYSYMBOL_atribuicao = 64,                /* atribuicao  */
-  YYSYMBOL_65_6 = 65,                      /* $@6  */
-  YYSYMBOL_fator = 66,                     /* fator  */
-  YYSYMBOL_numero = 67,                    /* numero  */
-  YYSYMBOL_comando_repetitivo = 68,        /* comando_repetitivo  */
-  YYSYMBOL_69_7 = 69,                      /* $@7  */
-  YYSYMBOL_70_8 = 70,                      /* $@8  */
-  YYSYMBOL_comando_condicional = 71        /* comando_condicional  */
+  YYSYMBOL_READ = 40,                      /* READ  */
+  YYSYMBOL_WRITE = 41,                     /* WRITE  */
+  YYSYMBOL_LOWER_THAN_ELSE = 42,           /* LOWER_THAN_ELSE  */
+  YYSYMBOL_YYACCEPT = 43,                  /* $accept  */
+  YYSYMBOL_programa = 44,                  /* programa  */
+  YYSYMBOL_45_1 = 45,                      /* $@1  */
+  YYSYMBOL_bloco = 46,                     /* bloco  */
+  YYSYMBOL_47_2 = 47,                      /* $@2  */
+  YYSYMBOL_parte_declara_rotulos = 48,     /* parte_declara_rotulos  */
+  YYSYMBOL_parte_declara_vars = 49,        /* parte_declara_vars  */
+  YYSYMBOL_var = 50,                       /* var  */
+  YYSYMBOL_51_3 = 51,                      /* $@3  */
+  YYSYMBOL_declara_vars = 52,              /* declara_vars  */
+  YYSYMBOL_declara_var = 53,               /* declara_var  */
+  YYSYMBOL_54_4 = 54,                      /* $@4  */
+  YYSYMBOL_55_5 = 55,                      /* $@5  */
+  YYSYMBOL_tipo = 56,                      /* tipo  */
+  YYSYMBOL_lista_id_var = 57,              /* lista_id_var  */
+  YYSYMBOL_lista_idents = 58,              /* lista_idents  */
+  YYSYMBOL_parte_declara_subrotinas = 59,  /* parte_declara_subrotinas  */
+  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_6 = 73,                      /* $@6  */
+  YYSYMBOL_fator = 74,                     /* fator  */
+  YYSYMBOL_numero = 75,                    /* numero  */
+  YYSYMBOL_comando_repetitivo = 76,        /* comando_repetitivo  */
+  YYSYMBOL_77_7 = 77,                      /* $@7  */
+  YYSYMBOL_78_8 = 78,                      /* $@8  */
+  YYSYMBOL_comando_condicional = 79,       /* comando_condicional  */
+  YYSYMBOL_cond_else = 80,                 /* cond_else  */
+  YYSYMBOL_if_then = 81,                   /* if_then  */
+  YYSYMBOL_82_9 = 82                       /* $@9  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -515,19 +526,19 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  3
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   74
+#define YYLAST   94
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  40
+#define YYNTOKENS  43
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  32
+#define YYNNTS  40
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  54
+#define YYNRULES  67
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  88
+#define YYNSTATES  114
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   294
+#define YYMAXUTOK   297
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -570,19 +581,20 @@ static const yytype_int8 yytranslate[] =
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39
+      35,    36,    37,    38,    39,    40,    41,    42
 };
 
 #if YYDEBUG
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
-static const yytype_uint8 yyrline[] =
+static const yytype_int16 yyrline[] =
 {
-       0,    38,    38,    38,    52,    49,    59,    60,    63,    67,
-      67,    68,    71,    72,    75,    78,    75,    86,    99,   105,
-     113,   114,   117,   121,   124,   125,   126,   129,   130,   133,
-     136,   137,   138,   141,   144,   147,   150,   153,   156,   159,
-     162,   165,   168,   171,   174,   177,   180,   180,   197,   208,
-     215,   217,   224,   217,   250
+       0,    41,    41,    41,    55,    52,    68,    69,    72,    76,
+      76,    77,    80,    81,    84,    87,    84,    95,   108,   114,
+     122,   123,   126,   130,   133,   134,   135,   138,   139,   142,
+     145,   146,   147,   148,   149,   152,   155,   156,   159,   168,
+     171,   174,   179,   182,   185,   188,   191,   194,   197,   200,
+     203,   206,   209,   212,   215,   218,   218,   235,   246,   253,
+     255,   262,   255,   288,   295,   297,   300,   300
 };
 #endif
 
@@ -604,13 +616,15 @@ static const char *const yytname[] =
   "LABEL", "TYPE", "ARRAY", "PROCEDURE", "FUNCTION", "GOTO", "IF", "THEN",
   "ELSE", "WHILE", "DO", "OR", "DIV", "AND", "NOT", "IGUAL", "DIFERENTE",
   "MENOR_IGUAL", "MAIOR_IGUAL", "MENOR", "MAIOR", "MAIS", "MENOS",
-  "ASTERISCO", "NUMERO", "$accept", "programa", "$@1", "bloco", "$@2",
-  "parte_declara_rotulos", "parte_declara_vars", "var", "$@3",
-  "declara_vars", "declara_var", "$@4", "$@5", "tipo", "lista_id_var",
-  "lista_idents", "parte_declara_subrotinas", "comando_composto",
-  "comandos", "comando", "comando_sem_rotulo", "expressao",
-  "expressao_simples", "termo", "atribuicao", "$@6", "fator", "numero",
-  "comando_repetitivo", "$@7", "$@8", "comando_condicional", YY_NULLPTR
+  "ASTERISCO", "NUMERO", "READ", "WRITE", "LOWER_THAN_ELSE", "$accept",
+  "programa", "$@1", "bloco", "$@2", "parte_declara_rotulos",
+  "parte_declara_vars", "var", "$@3", "declara_vars", "declara_var", "$@4",
+  "$@5", "tipo", "lista_id_var", "lista_idents",
+  "parte_declara_subrotinas", "comando_composto", "comandos", "comando",
+  "comando_sem_rotulo", "leitura", "lista_leituras", "simb_leitura",
+  "escrita", "lista_escritas", "expressao", "expressao_simples", "termo",
+  "atribuicao", "$@6", "fator", "numero", "comando_repetitivo", "$@7",
+  "$@8", "comando_condicional", "cond_else", "if_then", "$@9", YY_NULLPTR
 };
 
 static const char *
@@ -620,12 +634,12 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#define YYPACT_NINF (-48)
+#define YYPACT_NINF (-63)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-55)
+#define YYTABLE_NINF (-61)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -634,15 +648,18 @@ yysymbol_name (yysymbol_kind_t yysymbol)
    STATE-NUM.  */
 static const yytype_int8 yypact[] =
 {
-     -48,     9,    13,   -48,    12,    14,    18,   -48,     8,    36,
-      31,    30,   -48,    40,    38,    39,   -48,   -48,   -48,   -48,
-      41,   -48,   -48,    42,    35,   -48,    37,    -7,   -48,   -48,
-     -48,     4,   -48,   -48,   -48,    43,    44,   -48,   -48,    47,
-     -48,    32,   -48,    45,    46,    48,   -48,    -7,    -2,   -11,
-     -48,   -48,   -48,   -11,   -48,   -48,   -48,   -48,     5,   -10,
-     -23,   -48,    50,   -10,   -48,   -11,   -11,   -11,   -11,   -11,
-     -11,   -11,   -11,   -11,   -11,   -48,    -2,   -10,   -10,   -10,
-     -10,   -10,   -10,   -23,   -23,   -48,   -48,   -48
+     -63,     5,     7,   -63,    15,    35,    20,   -63,     3,    42,
+      38,    40,   -63,    50,    56,    57,   -63,   -63,   -63,   -63,
+      54,   -63,   -63,    58,    59,   -63,    60,    13,   -63,   -63,
+     -63,    -2,   -63,   -10,   -63,    65,    66,   -63,    63,    64,
+     -63,   -63,   -63,   -63,    67,   -63,    52,   -63,    55,    68,
+      69,    70,   -63,   -63,    29,   -17,   -20,   -63,    72,   -10,
+     -63,    13,    17,   -10,    17,   -63,   -63,   -63,   -63,   -10,
+     -10,   -10,   -10,   -10,   -10,   -10,    61,   -10,   -10,   -10,
+     -10,   -63,    16,   -63,    19,   -17,   -63,   -63,    10,   -63,
+      73,   -17,   -17,   -17,   -17,   -17,   -17,   -17,    17,   -20,
+     -20,   -63,   -63,   -63,    72,   -63,   -10,   -63,   -63,   -63,
+     -63,   -17,    17,   -63
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -653,30 +670,33 @@ static const yytype_int8 yydefact[] =
        2,     0,     0,     1,     0,     0,     0,    21,     0,     0,
        0,     7,    20,     0,     0,     9,     6,     3,    22,     8,
        0,     4,    14,     0,    10,    13,     0,    26,     5,    12,
-      19,     0,    46,    50,    30,     0,     0,    28,    29,     0,
-      32,     0,    31,     0,     0,     0,    23,    25,    51,     0,
-      18,    17,    15,     0,    24,    27,    48,    49,     0,    39,
-      42,    45,     0,    47,    52,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    16,    51,    33,    34,    36,
-      38,    35,    37,    40,    41,    44,    43,    53
+      19,     0,    55,     0,    59,     0,     0,    30,     0,     0,
+      28,    33,    34,    29,     0,    32,     0,    31,    65,     0,
+       0,     0,    57,    58,    66,    48,    51,    54,     0,     0,
+      23,    25,    60,     0,    60,    63,    18,    17,    15,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    38,     0,    37,     0,    41,    24,    27,     0,    64,
+       0,    56,    42,    43,    45,    47,    44,    46,    60,    49,
+      50,    53,    52,    35,     0,    39,     0,    61,    16,    67,
+      36,    40,    60,    62
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,   -48,
-      49,   -48,   -48,   -48,   -48,   -48,   -48,    51,    16,   -48,
-     -47,   -48,   -46,   -38,   -48,   -48,   -32,   -48,   -48,   -48,
-     -48,   -48
+     -63,   -63,   -63,   -63,   -63,   -63,   -63,   -63,   -63,   -63,
+      53,   -63,   -63,   -63,   -63,   -63,   -63,    71,    18,   -63,
+     -62,   -63,   -63,   -18,   -63,   -63,    24,   -58,   -46,   -63,
+     -63,   -33,   -63,   -63,   -63,   -63,   -63,   -63,   -63,   -63
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
        0,     1,     2,    14,    23,    15,    18,    19,    20,    24,
-      25,    26,    62,    52,    31,     8,    21,    34,    35,    36,
-      37,    58,    59,    60,    38,    45,    61,    39,    40,    41,
-      76,    42
+      25,    26,    90,    68,    31,     8,    21,    37,    38,    39,
+      40,    41,    82,    83,    42,    84,    54,    55,    56,    43,
+      51,    57,    44,    45,    46,   112,    47,    65,    48,    76
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -684,52 +704,60 @@ static const yytype_int8 yydefgoto[] =
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int8 yytable[] =
 {
-     -54,    55,    56,    27,    73,   -54,    32,    63,    27,     3,
-      43,    32,    44,     9,    10,    74,     4,   -51,     6,    77,
-      78,    79,    80,    81,    82,     5,    71,    72,    57,    87,
-      64,     7,    33,    83,    84,    65,    66,    67,    68,    69,
-      70,    85,    86,    11,    12,    13,    16,    17,   -14,   -11,
-      30,    47,    27,    22,    46,    48,    49,    75,    50,    51,
-       0,     0,    53,    54,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    29,    28
+      87,    85,    89,    52,    49,     3,    50,    79,     9,    10,
+       4,    91,    92,    93,    94,    95,    96,    97,    80,    77,
+      78,   103,   104,    27,   105,   106,    32,    27,     5,    53,
+      32,    99,   100,     7,    33,   107,   109,   -60,    33,     6,
+      70,    71,    72,    73,    74,    75,   101,   102,   111,    11,
+     113,    12,    34,    35,    36,    13,    16,    35,    36,    70,
+      71,    72,    73,    74,    75,    17,    22,   -11,    27,    58,
+      59,    61,   -14,    30,    60,    62,    63,    29,    64,    86,
+     108,    66,    67,    98,    69,    81,   110,    88,     0,     0,
+       0,     0,     0,     0,    28
 };
 
 static const yytype_int8 yycheck[] =
 {
-       7,    48,    13,    10,    27,     7,    13,    53,    10,     0,
-       6,    13,     8,     5,     6,    38,     3,    24,     4,    65,
-      66,    67,    68,    69,    70,    13,    36,    37,    39,    76,
-      25,    13,    39,    71,    72,    30,    31,    32,    33,    34,
-      35,    73,    74,     7,    13,    15,     6,     9,    13,    10,
-      13,     7,    10,    12,    11,     8,    24,     7,    13,    13,
-      -1,    -1,    14,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    24,    23
+      62,    59,    64,    13,     6,     0,     8,    27,     5,     6,
+       3,    69,    70,    71,    72,    73,    74,    75,    38,    36,
+      37,     5,     6,    10,     5,     6,    13,    10,    13,    39,
+      13,    77,    78,    13,    21,    25,    98,    24,    21,     4,
+      30,    31,    32,    33,    34,    35,    79,    80,   106,     7,
+     112,    13,    39,    40,    41,    15,     6,    40,    41,    30,
+      31,    32,    33,    34,    35,     9,    12,    10,    10,     4,
+       4,     7,    13,    13,    11,     8,    24,    24,    23,    61,
+       7,    13,    13,    22,    14,    13,   104,    63,    -1,    -1,
+      -1,    -1,    -1,    -1,    23
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
    state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
-       0,    41,    42,     0,     3,    13,     4,    13,    55,     5,
-       6,     7,    13,    15,    43,    45,     6,     9,    46,    47,
-      48,    56,    12,    44,    49,    50,    51,    10,    57,    50,
-      13,    54,    13,    39,    57,    58,    59,    60,    64,    67,
-      68,    69,    71,     6,     8,    65,    11,     7,     8,    24,
-      13,    13,    53,    14,    58,    60,    13,    39,    61,    62,
-      63,    66,    52,    62,    25,    30,    31,    32,    33,    34,
-      35,    36,    37,    27,    38,     7,    70,    62,    62,    62,
-      62,    62,    62,    63,    63,    66,    66,    60
+       0,    44,    45,     0,     3,    13,     4,    13,    58,     5,
+       6,     7,    13,    15,    46,    48,     6,     9,    49,    50,
+      51,    59,    12,    47,    52,    53,    54,    10,    60,    53,
+      13,    57,    13,    21,    39,    40,    41,    60,    61,    62,
+      63,    64,    67,    72,    75,    76,    77,    79,    81,     6,
+       8,    73,    13,    39,    69,    70,    71,    74,     4,     4,
+      11,     7,     8,    24,    23,    80,    13,    13,    56,    14,
+      30,    31,    32,    33,    34,    35,    82,    36,    37,    27,
+      38,    13,    65,    66,    68,    70,    61,    63,    69,    63,
+      55,    70,    70,    70,    70,    70,    70,    70,    22,    71,
+      71,    74,    74,     5,     6,     5,     6,    25,     7,    63,
+      66,    70,    78,    63
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    40,    42,    41,    44,    43,    45,    45,    46,    48,
-      47,    47,    49,    49,    51,    52,    50,    53,    54,    54,
-      55,    55,    56,    57,    58,    58,    58,    59,    59,    60,
-      60,    60,    60,    61,    61,    61,    61,    61,    61,    61,
-      62,    62,    62,    63,    63,    63,    65,    64,    66,    66,
-      67,    69,    70,    68,    71
+       0,    43,    45,    44,    47,    46,    48,    48,    49,    51,
+      50,    50,    52,    52,    54,    55,    53,    56,    57,    57,
+      58,    58,    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
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -738,9 +766,10 @@ static const yytype_int8 yyr2[] =
        0,     2,     0,     9,     0,     5,     2,     0,     1,     0,
        3,     0,     2,     1,     0,     0,     6,     1,     3,     1,
        3,     1,     0,     3,     3,     2,     0,     3,     1,     1,
-       1,     1,     1,     3,     3,     3,     3,     3,     3,     1,
-       3,     3,     1,     3,     3,     1,     0,     4,     1,     1,
-       1,     0,     0,     6,     0
+       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
 };
 
 
@@ -1204,52 +1233,64 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* $@1: %empty  */
-#line 38 "compilador.y"
+#line 41 "compilador.y"
              {
              geraCodigo (NULL, "INPP");
              }
-#line 1212 "compilador.tab.c"
+#line 1241 "compilador.tab.c"
     break;
 
   case 3: /* programa: $@1 PROGRAM IDENT ABRE_PARENTESES lista_idents FECHA_PARENTESES PONTO_E_VIRGULA bloco PONTO  */
-#line 43 "compilador.y"
+#line 46 "compilador.y"
                          {
              geraCodigo (NULL, "PARA");
              }
-#line 1220 "compilador.tab.c"
+#line 1249 "compilador.tab.c"
     break;
 
   case 4: /* $@2: %empty  */
-#line 52 "compilador.y"
+#line 55 "compilador.y"
               {
               }
-#line 1227 "compilador.tab.c"
+#line 1256 "compilador.tab.c"
+    break;
+
+  case 5: /* bloco: parte_declara_rotulos parte_declara_vars parte_declara_subrotinas $@2 comando_composto  */
+#line 58 "compilador.y"
+                               {
+               retira(desloc,ts);
+               char buffer[50];
+               sprintf(buffer,"DMEM %d",desloc);
+               geraCodigo(NULL,buffer);
+               desloc = 0;
+              }
+#line 1268 "compilador.tab.c"
     break;
 
   case 9: /* $@3: %empty  */
-#line 67 "compilador.y"
+#line 76 "compilador.y"
               { }
-#line 1233 "compilador.tab.c"
+#line 1274 "compilador.tab.c"
     break;
 
   case 14: /* $@4: %empty  */
-#line 75 "compilador.y"
+#line 84 "compilador.y"
               { num_vars = 0; }
-#line 1239 "compilador.tab.c"
+#line 1280 "compilador.tab.c"
     break;
 
   case 15: /* $@5: %empty  */
-#line 78 "compilador.y"
+#line 87 "compilador.y"
               { /* AMEM num_vars */
                char buffer[50];
                sprintf(buffer, "AMEM %d", num_vars);
                geraCodigo(NULL, buffer);
               }
-#line 1249 "compilador.tab.c"
+#line 1290 "compilador.tab.c"
     break;
 
   case 17: /* tipo: IDENT  */
-#line 87 "compilador.y"
+#line 96 "compilador.y"
                {
                 if (strcmp(token, "integer") == 0) {
                     atualiza_tipo(num_vars, INTEIRO, ts);
@@ -1260,112 +1301,140 @@ yyreduce:
                 }
                 mostra_ts(ts); // Mostra a tabela após a inserção
                }
-#line 1264 "compilador.tab.c"
+#line 1305 "compilador.tab.c"
     break;
 
   case 18: /* lista_id_var: lista_id_var VIRGULA IDENT  */
-#line 100 "compilador.y"
+#line 109 "compilador.y"
               { /* insere �ltima vars na tabela de s�mbolos */ 
                num_vars += 1;
                insere_ts(token,VS,nivel_lexico,NSEI,desloc,ts);
                desloc += 1;
               }
-#line 1274 "compilador.tab.c"
+#line 1315 "compilador.tab.c"
     break;
 
   case 19: /* lista_id_var: IDENT  */
-#line 105 "compilador.y"
+#line 114 "compilador.y"
                     { 
                num_vars += 1;
                insere_ts(token,VS,nivel_lexico,NSEI,desloc,ts);
                desloc += 1;
                /* insere vars na tabela de s�mbolos */
             }
-#line 1285 "compilador.tab.c"
+#line 1326 "compilador.tab.c"
+    break;
+
+  case 38: /* simb_leitura: IDENT  */
+#line 159 "compilador.y"
+                    {
+               geraCodigo(NULL, "LEIT");
+               l_elem = busca(token,ts);
+               char buffer[50];
+               sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->desloc);
+               geraCodigo(NULL,buffer);
+            }
+#line 1338 "compilador.tab.c"
+    break;
+
+  case 40: /* lista_escritas: lista_escritas VIRGULA expressao_simples  */
+#line 171 "compilador.y"
+                                                         {
+               geraCodigo(NULL,"IMPR");
+            }
+#line 1346 "compilador.tab.c"
     break;
 
-  case 33: /* expressao: expressao IGUAL expressao_simples  */
-#line 141 "compilador.y"
+  case 41: /* lista_escritas: expressao_simples  */
+#line 174 "compilador.y"
+                                {
+               geraCodigo(NULL,"IMPR");
+            }
+#line 1354 "compilador.tab.c"
+    break;
+
+  case 42: /* expressao: expressao IGUAL expressao_simples  */
+#line 179 "compilador.y"
                                              {
             geraCodigo(NULL, "CMIG"); // Adiciona operação de cmig
          }
-#line 1293 "compilador.tab.c"
+#line 1362 "compilador.tab.c"
     break;
 
-  case 34: /* expressao: expressao DIFERENTE expressao_simples  */
-#line 144 "compilador.y"
+  case 43: /* expressao: expressao DIFERENTE expressao_simples  */
+#line 182 "compilador.y"
                                                 {
             geraCodigo(NULL, "CMDG"); // Adiciona operação de cmdg
          }
-#line 1301 "compilador.tab.c"
+#line 1370 "compilador.tab.c"
     break;
 
-  case 35: /* expressao: expressao MENOR expressao_simples  */
-#line 147 "compilador.y"
+  case 44: /* expressao: expressao MENOR expressao_simples  */
+#line 185 "compilador.y"
                                              {
             geraCodigo(NULL, "CMME"); // Adiciona operação de cmme
          }
-#line 1309 "compilador.tab.c"
+#line 1378 "compilador.tab.c"
     break;
 
-  case 36: /* expressao: expressao MENOR_IGUAL expressao_simples  */
-#line 150 "compilador.y"
+  case 45: /* expressao: expressao MENOR_IGUAL expressao_simples  */
+#line 188 "compilador.y"
                                                    {
             geraCodigo(NULL, "CMEG"); // Adiciona operação de cmeg
          }
-#line 1317 "compilador.tab.c"
+#line 1386 "compilador.tab.c"
     break;
 
-  case 37: /* expressao: expressao MAIOR expressao_simples  */
-#line 153 "compilador.y"
+  case 46: /* expressao: expressao MAIOR expressao_simples  */
+#line 191 "compilador.y"
                                              {
             geraCodigo(NULL, "CMMA"); // Adiciona operação de cmma
          }
-#line 1325 "compilador.tab.c"
+#line 1394 "compilador.tab.c"
     break;
 
-  case 38: /* expressao: expressao MAIOR_IGUAL expressao_simples  */
-#line 156 "compilador.y"
+  case 47: /* expressao: expressao MAIOR_IGUAL expressao_simples  */
+#line 194 "compilador.y"
                                                    {
             geraCodigo(NULL, "CMAG"); // Adiciona operação de cmag
          }
-#line 1333 "compilador.tab.c"
+#line 1402 "compilador.tab.c"
     break;
 
-  case 40: /* expressao_simples: expressao_simples MAIS termo  */
-#line 162 "compilador.y"
+  case 49: /* expressao_simples: expressao_simples MAIS termo  */
+#line 200 "compilador.y"
                                                 {
                geraCodigo(NULL, "SOMA"); // Adiciona operação de soma
             }
-#line 1341 "compilador.tab.c"
+#line 1410 "compilador.tab.c"
     break;
 
-  case 41: /* expressao_simples: expressao_simples MENOS termo  */
-#line 165 "compilador.y"
+  case 50: /* expressao_simples: expressao_simples MENOS termo  */
+#line 203 "compilador.y"
                                             {
                geraCodigo(NULL, "SUBT"); // Adiciona operação de subt
             }
-#line 1349 "compilador.tab.c"
+#line 1418 "compilador.tab.c"
     break;
 
-  case 43: /* termo: termo ASTERISCO fator  */
-#line 171 "compilador.y"
+  case 52: /* termo: termo ASTERISCO fator  */
+#line 209 "compilador.y"
                              {
                geraCodigo(NULL, "MULT"); // Adiciona operação de mult
             }
-#line 1357 "compilador.tab.c"
+#line 1426 "compilador.tab.c"
     break;
 
-  case 44: /* termo: termo DIV fator  */
-#line 174 "compilador.y"
+  case 53: /* termo: termo DIV fator  */
+#line 212 "compilador.y"
                               {
                geraCodigo(NULL, "DIVI"); // Adiciona operação de divi
             }
-#line 1365 "compilador.tab.c"
+#line 1434 "compilador.tab.c"
     break;
 
-  case 46: /* $@6: %empty  */
-#line 180 "compilador.y"
+  case 55: /* $@6: %empty  */
+#line 218 "compilador.y"
                   {
     // Busca variável no lado esquerdo
     l_elem = busca(token, ts);
@@ -1376,22 +1445,22 @@ yyreduce:
         destino_desloc = l_elem->desloc;
     }
 }
-#line 1380 "compilador.tab.c"
+#line 1449 "compilador.tab.c"
     break;
 
-  case 47: /* atribuicao: IDENT $@6 ATRIBUICAO expressao_simples  */
-#line 189 "compilador.y"
+  case 56: /* atribuicao: IDENT $@6 ATRIBUICAO expressao_simples  */
+#line 227 "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 1391 "compilador.tab.c"
+#line 1460 "compilador.tab.c"
     break;
 
-  case 48: /* fator: IDENT  */
-#line 197 "compilador.y"
+  case 57: /* fator: IDENT  */
+#line 235 "compilador.y"
              {
     // Carrega variável
     l_elem = busca(token, ts);
@@ -1403,22 +1472,22 @@ yyreduce:
         geraCodigo(NULL, buffer);
     }
 }
-#line 1407 "compilador.tab.c"
+#line 1476 "compilador.tab.c"
     break;
 
-  case 49: /* fator: NUMERO  */
-#line 208 "compilador.y"
+  case 58: /* fator: NUMERO  */
+#line 246 "compilador.y"
          {
     // Empilha constante
     char buffer[50];
     sprintf(buffer, "CRCT %s", token);
     geraCodigo(NULL, buffer);
 }
-#line 1418 "compilador.tab.c"
+#line 1487 "compilador.tab.c"
     break;
 
-  case 51: /* $@7: %empty  */
-#line 217 "compilador.y"
+  case 60: /* $@7: %empty  */
+#line 255 "compilador.y"
                     {
                char r_ini[4];
                sprintf(r_ini, "R%02d", rot_id);
@@ -1426,11 +1495,11 @@ yyreduce:
                rot_id += 1;
                geraCodigo(r_ini,"NADA");
             }
-#line 1430 "compilador.tab.c"
+#line 1499 "compilador.tab.c"
     break;
 
-  case 52: /* $@8: %empty  */
-#line 224 "compilador.y"
+  case 61: /* $@8: %empty  */
+#line 262 "compilador.y"
                                {
                char r_fim[4];
                sprintf(r_fim, "R%02d", rot_id);
@@ -1441,11 +1510,11 @@ yyreduce:
                strcat(buffer,r_fim);
                geraCodigo(NULL,buffer);
             }
-#line 1445 "compilador.tab.c"
+#line 1514 "compilador.tab.c"
     break;
 
-  case 53: /* comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo  */
-#line 234 "compilador.y"
+  case 62: /* comando_repetitivo: $@7 WHILE expressao DO $@8 comando_sem_rotulo  */
+#line 272 "compilador.y"
                                {
                char r_ini[4];
                char r_fim[4];
@@ -1460,11 +1529,60 @@ yyreduce:
 
                geraCodigo(r_fim,"NADA");
             }
-#line 1464 "compilador.tab.c"
+#line 1533 "compilador.tab.c"
+    break;
+
+  case 63: /* comando_condicional: if_then cond_else  */
+#line 288 "compilador.y"
+                                       {
+               char r_fim[4];
+               desempilha(r_fim,rot);
+               geraCodigo(r_fim,"NADA");
+            }
+#line 1543 "compilador.tab.c"
+    break;
+
+  case 66: /* $@9: %empty  */
+#line 300 "compilador.y"
+                      {
+               char r_else[4];
+               sprintf(r_else,"R%02d",rot_id);
+               empilha(r_else,rot);
+               rot_id += 1;
+               char buffer[50];
+               strcpy(buffer, "DSVF ");
+               strcat(buffer,r_else);
+               geraCodigo(NULL,buffer);
+               
+               char r_fim[4];
+               sprintf(r_fim, "R%02d", rot_id);
+               empilha(r_fim, rot);
+               rot_id += 1;
+            }
+#line 1563 "compilador.tab.c"
+    break;
+
+  case 67: /* if_then: IF expressao $@9 THEN comando_sem_rotulo  */
+#line 315 "compilador.y"
+                                    {
+               char r_fim[4];
+               desempilha(r_fim,rot);
+               char r_else[4];
+               desempilha(r_else,rot);
+               
+               empilha(r_fim,rot);
+               char buffer[50];
+               strcpy(buffer, "DSVS ");
+               strcat(buffer,r_fim);
+               geraCodigo(NULL,buffer);
+
+               geraCodigo(r_else,"NADA");
+            }
+#line 1582 "compilador.tab.c"
     break;
 
 
-#line 1468 "compilador.tab.c"
+#line 1586 "compilador.tab.c"
 
       default: break;
     }
@@ -1657,7 +1775,7 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 254 "compilador.y"
+#line 332 "compilador.y"
 
 
 int main (int argc, char** argv) {
diff --git a/compilador.tab.h b/compilador.tab.h
index a923641..98da8d5 100644
--- a/compilador.tab.h
+++ b/compilador.tab.h
@@ -90,7 +90,10 @@ extern int yydebug;
     MAIS = 291,                    /* MAIS  */
     MENOS = 292,                   /* MENOS  */
     ASTERISCO = 293,               /* ASTERISCO  */
-    NUMERO = 294                   /* NUMERO  */
+    NUMERO = 294,                  /* NUMERO  */
+    READ = 295,                    /* READ  */
+    WRITE = 296,                   /* WRITE  */
+    LOWER_THAN_ELSE = 297          /* LOWER_THAN_ELSE  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
diff --git a/compilador.y b/compilador.y
index 76707a4..1eb9e03 100644
--- a/compilador.y
+++ b/compilador.y
@@ -31,7 +31,10 @@ stack_t *rot;
 %token GOTO IF THEN ELSE WHILE DO OR DIV
 %token AND NOT IGUAL DIFERENTE MENOR_IGUAL
 %token MAIOR_IGUAL MENOR MAIOR MAIS MENOS
-%token ASTERISCO NUMERO
+%token ASTERISCO NUMERO READ WRITE
+
+%nonassoc LOWER_THAN_ELSE
+%nonassoc ELSE
 
 %%
 
@@ -52,7 +55,13 @@ bloco       :
               {
               }
 
-              comando_composto
+              comando_composto {
+               retira(desloc,ts);
+               char buffer[50];
+               sprintf(buffer,"DMEM %d",desloc);
+               geraCodigo(NULL,buffer);
+               desloc = 0;
+              }
               ;
 
 
@@ -136,6 +145,35 @@ comando_sem_rotulo: atribuicao
             | comando_composto
             | comando_condicional
             | comando_repetitivo
+            | leitura
+            | escrita
+;
+
+leitura: READ ABRE_PARENTESES lista_leituras FECHA_PARENTESES
+;
+
+lista_leituras: lista_leituras VIRGULA simb_leitura
+            | simb_leitura
+;
+
+simb_leitura: IDENT {
+               geraCodigo(NULL, "LEIT");
+               l_elem = busca(token,ts);
+               char buffer[50];
+               sprintf(buffer,"ARMZ %d,%d",l_elem->nivel,l_elem->desloc);
+               geraCodigo(NULL,buffer);
+            }
+;
+
+escrita: WRITE ABRE_PARENTESES lista_escritas FECHA_PARENTESES
+;
+
+lista_escritas: lista_escritas VIRGULA expressao_simples {
+               geraCodigo(NULL,"IMPR");
+            }
+            | expressao_simples {
+               geraCodigo(NULL,"IMPR");
+            }
 ;
 
 expressao: expressao IGUAL expressao_simples {
@@ -247,10 +285,19 @@ comando_repetitivo: {
             }
 ;
 
-comando_condicional: if_then elses
+comando_condicional: if_then cond_else {
+               char r_fim[4];
+               desempilha(r_fim,rot);
+               geraCodigo(r_fim,"NADA");
+            }
 ;
 
-if_then: IF expressao THEN {
+cond_else: ELSE
+            comando_sem_rotulo
+            | %prec LOWER_THAN_ELSE
+;
+
+if_then: IF expressao {
                char r_else[4];
                sprintf(r_else,"R%02d",rot_id);
                empilha(r_else,rot);
@@ -265,14 +312,23 @@ if_then: IF expressao THEN {
                empilha(r_fim, rot);
                rot_id += 1;
             }
-            comando_sem_rotulo {
+            THEN comando_sem_rotulo {
+               char r_fim[4];
+               desempilha(r_fim,rot);
+               char r_else[4];
+               desempilha(r_else,rot);
                
-            }
+               empilha(r_fim,rot);
+               char buffer[50];
+               strcpy(buffer, "DSVS ");
+               strcat(buffer,r_fim);
+               geraCodigo(NULL,buffer);
 
-elses: ELSE comando_sem_rotulo elses
-            |
+               geraCodigo(r_else,"NADA");
+            }
 ;
 
+
 %%
 
 int main (int argc, char** argv) {
diff --git a/lex.yy.c b/lex.yy.c
index e52d3a6..ef6ad0e 100644
--- a/lex.yy.c
+++ b/lex.yy.c
@@ -351,8 +351,8 @@ static void yynoreturn yy_fatal_error ( const char* msg  );
 	(yy_hold_char) = *yy_cp; \
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
-#define YY_NUM_RULES 41
-#define YY_END_OF_BUFFER 42
+#define YY_NUM_RULES 43
+#define YY_END_OF_BUFFER 44
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -360,20 +360,21 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static const flex_int16_t yy_accept[107] =
+static const flex_int16_t yy_accept[115] =
     {   0,
-        0,    0,   42,   41,    2,    1,   13,   14,   38,   36,
-       11,   37,   12,   39,   10,    9,   34,   30,   35,   40,
-       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
-       40,   40,   40,   40,    2,    0,   39,    8,   32,   31,
-       33,   40,   40,   40,   40,   40,   25,   40,   40,   40,
-       40,   21,   40,   40,   26,   40,   40,   40,   40,   40,
-        0,    0,   28,   40,   40,   27,   40,    7,   40,   40,
-       40,   29,   40,   40,   40,    5,   40,    3,   40,   40,
-       23,   40,   20,   40,   40,   40,   22,   16,   40,   17,
-        6,   40,   15,   40,   40,   24,   40,   40,   40,   40,
-
-       40,    4,   19,   40,   18,    0
+        0,    0,   44,   43,    2,    1,   15,   16,   40,   38,
+       13,   39,   14,   41,   12,   11,   36,   32,   37,   42,
+       42,   42,   42,   42,   42,   42,   42,   42,   42,   42,
+       42,   42,   42,   42,   42,    2,    0,   41,   10,   34,
+       33,   35,   42,   42,   42,   42,   42,   27,   42,   42,
+       42,   42,   23,   42,   42,   28,   42,   42,   42,   42,
+       42,   42,   42,    0,    0,   30,   42,   42,   29,   42,
+        7,   42,   42,   42,   31,   42,   42,   42,   42,    5,
+       42,   42,    3,   42,   42,   25,   42,   22,   42,   42,
+       42,    8,   24,   18,   42,   42,   19,    6,   42,   17,
+
+       42,   42,   26,    9,   42,   42,   42,   42,   42,    4,
+       21,   42,   20,    0
     } ;
 
 static const YY_CHAR yy_ec[256] =
@@ -416,78 +417,82 @@ static const YY_CHAR yy_meta[39] =
         3,    3,    3,    3,    3,    3,    3,    3
     } ;
 
-static const flex_int16_t yy_base[109] =
+static const flex_int16_t yy_base[117] =
     {   0,
-        0,    0,  116,  117,  113,  117,  108,  117,  117,  117,
-      117,  117,  117,  102,   97,  117,   24,  117,   96,    0,
-       12,   88,   16,   16,   74,   78,   84,   88,   75,   72,
-       71,   22,   84,   76,   98,   93,   87,  117,  117,  117,
-      117,    0,   76,   64,   71,   58,    0,   60,   71,   62,
-       56,    0,   70,   54,    0,   57,   64,   54,   52,   57,
-       76,   43,    0,   63,   54,    0,   57,    0,   58,   47,
-       54,    0,   30,   46,   52,    0,   46,   66,   33,   41,
-        0,   35,    0,   41,   45,   34,    0,    0,   43,    0,
-        0,   38,    0,   41,   41,    0,   28,   22,   28,   26,
-
-       21,    0,    0,   30,    0,  117,   48,   60
+        0,    0,  123,  124,  120,  124,  115,  124,  124,  124,
+      124,  124,  124,  109,  104,  124,   24,  124,  103,    0,
+       12,   95,   16,   16,   81,   85,   91,   95,   82,   79,
+       78,   87,   22,   90,   23,  105,  100,   94,  124,  124,
+      124,  124,    0,   83,   71,   78,   65,    0,   67,   78,
+       69,   63,    0,   77,   61,    0,   64,   75,   70,   60,
+       58,   63,   62,   81,   44,    0,   68,   59,    0,   62,
+        0,   63,   52,   59,    0,   32,   59,   50,   56,    0,
+       50,   42,   69,   36,   44,    0,   38,    0,   44,   48,
+       37,    0,    0,    0,   46,   45,    0,    0,   40,    0,
+
+       44,   46,    0,    0,   32,   24,   30,   28,   22,    0,
+        0,   31,    0,  124,   48,   60
     } ;
 
-static const flex_int16_t yy_def[109] =
+static const flex_int16_t yy_def[117] =
     {   0,
-      106,    1,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  107,
-      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
-      107,  107,  107,  107,  106,  108,  106,  106,  106,  106,
-      106,  107,  107,  107,  107,  107,  107,  107,  107,  107,
-      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
-      108,  108,  107,  107,  107,  107,  107,  107,  107,  107,
-      107,  107,  107,  107,  107,  107,  107,  108,  107,  107,
-      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
-      107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
-
-      107,  107,  107,  107,  107,    0,  106,  106
+      114,    1,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  114,  116,  114,  114,  114,
+      114,  114,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  116,  116,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  116,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  115,  115,    0,  114,  114
     } ;
 
-static const flex_int16_t yy_nxt[156] =
+static const flex_int16_t yy_nxt[163] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
        14,   15,   16,   17,   18,   19,   20,   21,   22,   20,
        23,   24,   25,   26,   20,   27,   28,   20,   29,   30,
-       31,   20,   20,   32,   20,   33,   34,   20,   39,   40,
-       43,   46,   48,   44,   49,   47,   57,   78,   62,   85,
-       42,  105,  104,   86,  103,  102,  101,  100,   99,   58,
-       61,   98,   61,   97,   96,   95,   94,   93,   92,   91,
-       90,   62,   89,   88,   87,   84,   83,   82,   81,   80,
-       79,   62,   77,   76,   75,   74,   73,   72,   71,   70,
-       69,   68,   67,   66,   65,   64,   63,   37,   62,   35,
-
-       60,   59,   56,   55,   54,   53,   52,   51,   50,   45,
-       41,   38,   37,   36,   35,  106,    3,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106
+       31,   32,   20,   33,   20,   34,   35,   20,   40,   41,
+       44,   47,   49,   45,   50,   48,   59,   62,   83,   65,
+       43,   90,  113,  112,   63,   91,  111,  110,  109,   60,
+       64,  108,   64,  107,  106,  105,  104,  103,  102,  101,
+      100,   99,   98,   97,   65,   96,   95,   94,   93,   92,
+       89,   88,   87,   86,   85,   84,   65,   82,   81,   80,
+       79,   78,   77,   76,   75,   74,   73,   72,   71,   70,
+
+       69,   68,   67,   66,   38,   65,   36,   61,   58,   57,
+       56,   55,   54,   53,   52,   51,   46,   42,   39,   38,
+       37,   36,  114,    3,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114
     } ;
 
-static const flex_int16_t yy_chk[156] =
+static const flex_int16_t yy_chk[163] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,   17,   17,
-       21,   23,   24,   21,   24,   23,   32,   62,   62,   73,
-      107,  104,  101,   73,  100,   99,   98,   97,   95,   32,
-      108,   94,  108,   92,   89,   86,   85,   84,   82,   80,
-       79,   78,   77,   75,   74,   71,   70,   69,   67,   65,
-       64,   61,   60,   59,   58,   57,   56,   54,   53,   51,
-       50,   49,   48,   46,   45,   44,   43,   37,   36,   35,
-
-       34,   33,   31,   30,   29,   28,   27,   26,   25,   22,
-       19,   15,   14,    7,    5,    3,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
-      106,  106,  106,  106,  106
+       21,   23,   24,   21,   24,   23,   33,   35,   65,   65,
+      115,   76,  112,  109,   35,   76,  108,  107,  106,   33,
+      116,  105,  116,  102,  101,   99,   96,   95,   91,   90,
+       89,   87,   85,   84,   83,   82,   81,   79,   78,   77,
+       74,   73,   72,   70,   68,   67,   64,   63,   62,   61,
+       60,   59,   58,   57,   55,   54,   52,   51,   50,   49,
+
+       47,   46,   45,   44,   38,   37,   36,   34,   32,   31,
+       30,   29,   28,   27,   26,   25,   22,   19,   15,   14,
+        7,    5,    3,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114,  114,  114,  114,  114,  114,  114,  114,  114,
+      114,  114
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -531,8 +536,8 @@ char *yytext;
 
 int nl = 1;
 
-#line 535 "lex.yy.c"
-#line 536 "lex.yy.c"
+#line 540 "lex.yy.c"
+#line 541 "lex.yy.c"
 
 #define INITIAL 0
 
@@ -752,7 +757,7 @@ YY_DECL
 #line 41 "compilador.l"
 
 
-#line 756 "lex.yy.c"
+#line 761 "lex.yy.c"
 
 	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
 		{
@@ -779,13 +784,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 107 )
+				if ( yy_current_state >= 115 )
 					yy_c = yy_meta[yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 117 );
+		while ( yy_base[yy_current_state] != 124 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -864,306 +869,324 @@ YY_RULE_SETUP
 case 8:
 YY_RULE_SETUP
 #line 73 "compilador.l"
+{ simbolo = simb_read;
+          strncpy (token, yytext, TAM_TOKEN);
+          IMPRIME("read  ");
+          return READ;
+}
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 79 "compilador.l"
+{ simbolo = simb_write;
+          strncpy (token, yytext, TAM_TOKEN);
+          IMPRIME("write  ");
+          return WRITE;
+}
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 85 "compilador.l"
 { simbolo = simb_atribuicao;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" atribuicao  ");
           return ATRIBUICAO;
  }
 	YY_BREAK
-case 9:
+case 11:
 YY_RULE_SETUP
-#line 79 "compilador.l"
+#line 91 "compilador.l"
 { simbolo = simb_ponto_e_virgula;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" pt_virgula  ");
           return PONTO_E_VIRGULA;
  }
 	YY_BREAK
-case 10:
+case 12:
 YY_RULE_SETUP
-#line 85 "compilador.l"
+#line 97 "compilador.l"
 { simbolo = simb_dois_pontos;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" dois pontos ");
           return DOIS_PONTOS;
  }
 	YY_BREAK
-case 11:
+case 13:
 YY_RULE_SETUP
-#line 91 "compilador.l"
+#line 103 "compilador.l"
 { simbolo = simb_virgula;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" virgula  ");
           return VIRGULA;
  }
 	YY_BREAK
-case 12:
+case 14:
 YY_RULE_SETUP
-#line 98 "compilador.l"
+#line 110 "compilador.l"
 { simbolo = simb_ponto;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" ponto  ");
           return PONTO;
     }
 	YY_BREAK
-case 13:
+case 15:
 YY_RULE_SETUP
-#line 104 "compilador.l"
+#line 116 "compilador.l"
 { simbolo = simb_abre_parenteses;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" abre_parenteses  ");
           return ABRE_PARENTESES;
     }
 	YY_BREAK
-case 14:
+case 16:
 YY_RULE_SETUP
-#line 110 "compilador.l"
+#line 122 "compilador.l"
 { simbolo = simb_fecha_parenteses;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" fecha_parenteses ");
           return FECHA_PARENTESES;
  }
 	YY_BREAK
-case 15:
+case 17:
 YY_RULE_SETUP
-#line 116 "compilador.l"
+#line 128 "compilador.l"
 { simbolo  = simb_label;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("label ");
           return LABEL;
  }
 	YY_BREAK
-case 16:
+case 18:
 YY_RULE_SETUP
-#line 122 "compilador.l"
+#line 134 "compilador.l"
 { simbolo  = simb_type;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("type ");
           return TYPE;
  }
 	YY_BREAK
-case 17:
+case 19:
 YY_RULE_SETUP
-#line 128 "compilador.l"
+#line 140 "compilador.l"
 { simbolo  = simb_array;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("array ");
           return ARRAY;
  }
 	YY_BREAK
-case 18:
+case 20:
 YY_RULE_SETUP
-#line 134 "compilador.l"
+#line 146 "compilador.l"
 { simbolo  = simb_procedure;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("procedure ");
           return PROCEDURE;
  }
 	YY_BREAK
-case 19:
+case 21:
 YY_RULE_SETUP
-#line 140 "compilador.l"
+#line 152 "compilador.l"
 { simbolo  = simb_function;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("function ");
           return FUNCTION;
  }
 	YY_BREAK
-case 20:
+case 22:
 YY_RULE_SETUP
-#line 146 "compilador.l"
+#line 158 "compilador.l"
 { simbolo  = simb_goto;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("goto ");
           return GOTO;
  }
 	YY_BREAK
-case 21:
+case 23:
 YY_RULE_SETUP
-#line 152 "compilador.l"
+#line 164 "compilador.l"
 { simbolo  = simb_if;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("if ");
           return IF;
  }
 	YY_BREAK
-case 22:
+case 24:
 YY_RULE_SETUP
-#line 158 "compilador.l"
+#line 170 "compilador.l"
 { simbolo  = simb_then;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" then ");
           return THEN;
  }
 	YY_BREAK
-case 23:
+case 25:
 YY_RULE_SETUP
-#line 164 "compilador.l"
+#line 176 "compilador.l"
 { simbolo  = simb_else;
           strncpy (token, yytext, TAM_TOKEN);
-          IMPRIME("else ");
+          IMPRIME(" else ");
           return ELSE;
  }
 	YY_BREAK
-case 24:
+case 26:
 YY_RULE_SETUP
-#line 170 "compilador.l"
+#line 182 "compilador.l"
 { simbolo  = simb_while;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME("while ");
           return WHILE;
  }
 	YY_BREAK
-case 25:
+case 27:
 YY_RULE_SETUP
-#line 176 "compilador.l"
+#line 188 "compilador.l"
 { simbolo  = simb_do;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" do ");
           return DO;
  }
 	YY_BREAK
-case 26:
+case 28:
 YY_RULE_SETUP
-#line 182 "compilador.l"
+#line 194 "compilador.l"
 { simbolo  = simb_or;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" or ");
           return OR;
  }
 	YY_BREAK
-case 27:
+case 29:
 YY_RULE_SETUP
-#line 188 "compilador.l"
+#line 200 "compilador.l"
 { simbolo  = simb_div;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" div ");
           return DIV;
  }
 	YY_BREAK
-case 28:
+case 30:
 YY_RULE_SETUP
-#line 194 "compilador.l"
+#line 206 "compilador.l"
 { simbolo  = simb_and;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" and ");
           return AND;
  }
 	YY_BREAK
-case 29:
+case 31:
 YY_RULE_SETUP
-#line 200 "compilador.l"
+#line 212 "compilador.l"
 { simbolo  = simb_not;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" not ");
           return NOT;
  }
 	YY_BREAK
-case 30:
+case 32:
 YY_RULE_SETUP
-#line 206 "compilador.l"
+#line 218 "compilador.l"
 { simbolo = simb_igual;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" igual  ");
           return IGUAL;
     }
 	YY_BREAK
-case 31:
+case 33:
 YY_RULE_SETUP
-#line 212 "compilador.l"
+#line 224 "compilador.l"
 { simbolo = simb_diferente;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" diferente  ");
           return DIFERENTE;
     }
 	YY_BREAK
-case 32:
+case 34:
 YY_RULE_SETUP
-#line 218 "compilador.l"
+#line 230 "compilador.l"
 { simbolo = simb_menor_igual;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" menor_igual  ");
           return MENOR_IGUAL;
     }
 	YY_BREAK
-case 33:
+case 35:
 YY_RULE_SETUP
-#line 224 "compilador.l"
+#line 236 "compilador.l"
 { simbolo = simb_maior_igual;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" maior_igual  ");
           return MAIOR_IGUAL;
     }
 	YY_BREAK
-case 34:
+case 36:
 YY_RULE_SETUP
-#line 230 "compilador.l"
+#line 242 "compilador.l"
 { simbolo = simb_menor;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" menor  ");
           return MENOR;
     }
 	YY_BREAK
-case 35:
+case 37:
 YY_RULE_SETUP
-#line 236 "compilador.l"
+#line 248 "compilador.l"
 { simbolo = simb_maior;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" maior  ");
           return MAIOR;
     }
 	YY_BREAK
-case 36:
+case 38:
 YY_RULE_SETUP
-#line 242 "compilador.l"
+#line 254 "compilador.l"
 { simbolo = simb_mais;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" mais  ");
           return MAIS;
     }
 	YY_BREAK
-case 37:
+case 39:
 YY_RULE_SETUP
-#line 248 "compilador.l"
+#line 260 "compilador.l"
 { simbolo = simb_menos;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" menos  ");
           return MENOS;
     }
 	YY_BREAK
-case 38:
+case 40:
 YY_RULE_SETUP
-#line 254 "compilador.l"
+#line 266 "compilador.l"
 { simbolo = simb_asterisco;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" asterisco  ");
           return ASTERISCO;
     }
 	YY_BREAK
-case 39:
+case 41:
 YY_RULE_SETUP
-#line 260 "compilador.l"
+#line 272 "compilador.l"
 {  simbolo = simb_numero;
             strncpy (token, yytext,TAM_TOKEN);
             IMPRIME(" numero ");
             return NUMERO;
     }
 	YY_BREAK
-case 40:
+case 42:
 YY_RULE_SETUP
-#line 266 "compilador.l"
+#line 278 "compilador.l"
 { simbolo = simb_identificador;
           strncpy (token, yytext, TAM_TOKEN);
           IMPRIME(" ident  ");
           return IDENT;
         }
 	YY_BREAK
-case 41:
+case 43:
 YY_RULE_SETUP
-#line 272 "compilador.l"
+#line 284 "compilador.l"
 ECHO;
 	YY_BREAK
-#line 1167 "lex.yy.c"
+#line 1190 "lex.yy.c"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1460,7 +1483,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 107 )
+			if ( yy_current_state >= 115 )
 				yy_c = yy_meta[yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1488,11 +1511,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 107 )
+		if ( yy_current_state >= 115 )
 			yy_c = yy_meta[yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
-	yy_is_jam = (yy_current_state == 106);
+	yy_is_jam = (yy_current_state == 114);
 
 		return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2168,6 +2191,6 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 272 "compilador.l"
+#line 284 "compilador.l"
 
 
diff --git a/teste5.pas b/teste5.pas
new file mode 100644
index 0000000..940451a
--- /dev/null
+++ b/teste5.pas
@@ -0,0 +1,20 @@
+program cmdIf (input, output);
+var i, j: integer;       
+begin        
+   read(j);          
+   i:=0;                   
+   while i < j do        
+   begin                   
+      if i div 2 * 2 = i  
+        then
+        begin
+          write(i,0);
+          if i = 0
+            then write(2)
+            else write(3);
+         end
+        else  write(i,1);
+      i := i+1;             
+   end;                    
+end. 
+
-- 
GitLab