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")