From 4952f562e12e676040dabde0b4992d777fc3138e Mon Sep 17 00:00:00 2001 From: Lior Spach <ls12@inf.ufpr.br> Date: Mon, 15 Jun 2015 03:18:42 -0300 Subject: [PATCH] update TabSimb.scala --- src/main/scala/other/TabelaSimb.scala | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/scala/other/TabelaSimb.scala b/src/main/scala/other/TabelaSimb.scala index a4a97d0..799fe14 100644 --- a/src/main/scala/other/TabelaSimb.scala +++ b/src/main/scala/other/TabelaSimb.scala @@ -1,7 +1,7 @@ package other import scala.annotation.tailrec -abstract class Entrada(val id:String) +class Entrada(val id:String) case class Funcao (override val id:String, paramInfo:List[Param], desloc:Int, nvLex:Int, rotEntrada:String) extends Entrada(id) case class Procedimento(override val id:String, paramInfo:List[Param], @@ -26,7 +26,6 @@ object TabelaSimb { } def getLastProc(nvLex:Int) = { - print table.find { case p:Procedimento => if (p.nvLex==nvLex) true else false case f:Funcao => if (f.nvLex==nvLex) true else false @@ -34,7 +33,19 @@ object TabelaSimb { }.get } - @annotation.tailrec + @tailrec + def temParamOuVarComMesmoId(nome:String, rest:List[Entrada] = table):Boolean = { //No escopo da ultima funcao/proc + val e = getById(nome) + rest match { + case (p:Procedimento) :: xs => false + case (f:Funcao) :: xs => false + case (v:Var) :: xs => if (v.id == nome) true else temParamOuVarComMesmoId(nome, xs) + case (p:Param) :: xs => if (p.id == nome) true else temParamOuVarComMesmoId(nome, xs) + case _ => false + } + } + + @tailrec def numVarsLocais(nvLex:Int, count:Int=0, rest:List[Entrada] = table):Int = rest match { case (v:Var) :: xs => numVarsLocais(nvLex, count+1, xs) case (p:Procedimento) :: xs => if (p.nvLex>nvLex) numVarsLocais(nvLex,count,xs) else count -- GitLab