diff --git a/src/main/scala/other/Parser.scala b/src/main/scala/other/Parser.scala index 525cc6bd3b94dccea2007f868a8159d0df83cad4..2f393f69e30a53e004cda905c2d7bfe97d35fe1e 100644 --- a/src/main/scala/other/Parser.scala +++ b/src/main/scala/other/Parser.scala @@ -139,11 +139,9 @@ class Arith extends JavaTokenParsers { case _ => println("Encontrei um procedimento em uma atribuição?"); "integer" } //assert tipos - if (tipoExpr!="integer" && tipoAtrib!="integer") { - if (tipoExpr != tipoAtrib) { + if (tipoExpr!="integer" && tipoAtrib!="integer" && tipoExpr!=tipoAtrib) { println("Erro de tipo: Atribuição recebendo tipo diferente. (["+tipoAtrib+"] := ["+tipoExpr+"])") sys.exit(1) - } } //Otherwise ok! } @@ -210,6 +208,7 @@ class Arith extends JavaTokenParsers { stackbooltipo.clear() } else { + distinct.foreach{println} println("Erro de tipo: dois lados da expressão booleana com tipos diferentes") sys.exit(1) } @@ -258,6 +257,7 @@ class Arith extends JavaTokenParsers { def expr_simples:Parser[Object] = termo ~ rep( ("+"|"-") ~ termo ) ^^ { e => + stackbooltipo foreach println; //TIPO val distinct = stacktipo.distinct if ( distinct.size == 1 || ( distinct.size == 2 && distinct.contains("integer") ) ) @@ -268,11 +268,11 @@ class Arith extends JavaTokenParsers { else { stacktipo.pop(); stackbooltipo.push( stacktipo.pop() ) } else stackbooltipo.push( stacktipo.top ) - stacktipo.clear() } else { - println("Erro de tipo detectado! Expresão com tipos diferentes") + println("Erro de tipo: Expresão com tipos diferentes") sys.exit(1) } + stacktipo.clear() //END e match { case t ~ lst if ! lst.isEmpty =>