diff --git a/src/main/scala/other/Parser.scala b/src/main/scala/other/Parser.scala
index 3862e261626a1f17c62c2132e703722ac3a2eac9..e108459c7de39179786547b8604b2e8182f249c7 100644
--- a/src/main/scala/other/Parser.scala
+++ b/src/main/scala/other/Parser.scala
@@ -99,7 +99,22 @@ class Arith extends JavaTokenParsers {
     
     def verificaTipoAtrib (idAtrib:String) {
       val e = TabelaSimb.getById(idAtrib).get
-      val tipoExpr = stackbooltipo.pop()
+      val boolDistinct = stackbooltipo.distinct
+      if (boolDistinct.size!=1 && !(boolDistinct.size==2 && boolDistinct.contains("integer")) )
+      {
+        println("Erro de tipagem na expressão da atribuição")
+        sys.exit(1)        
+      }
+      
+      val tipoExpr = boolDistinct.size match {
+        case 1 => boolDistinct.pop()
+        case 2 => boolDistinct.top match {
+                    case "integer" => boolDistinct.pop(); boolDistinct.pop()
+                    case _ => boolDistinct.pop()
+                  }
+      }
+      boolDistinct.clear()
+      
       val tipoAtrib = e match {
         case v:Var    => v.tipo  
         case p:Param  => p.tipo
@@ -175,6 +190,7 @@ class Arith extends JavaTokenParsers {
             if (distinct.size==1 || (distinct.size==2 && distinct.contains("integer")) )
             {
               //fine
+              stackbooltipo.clear()
             }
             else {
                 println("Erro de tipo: dois lados da expressão booleana com tipos diferentes")