From 11afea5d4d000a8262e340f39199d02015d953b4 Mon Sep 17 00:00:00 2001 From: Lior Dinf <ls12@inf.ufpr.br> Date: Tue, 16 Jun 2015 14:46:17 -0300 Subject: [PATCH] =?UTF-8?q?Arrumado=20atribui=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/other/Parser.scala | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/scala/other/Parser.scala b/src/main/scala/other/Parser.scala index 3862e26..e108459 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") -- GitLab