diff --git a/compiler/LexerHelper.scala b/compiler/LexerHelper.scala
new file mode 100644
index 0000000000000000000000000000000000000000..581fcae1087cfd448dfe75eaff9eb3373bf89e74
--- /dev/null
+++ b/compiler/LexerHelper.scala
@@ -0,0 +1,44 @@
+
+package lexer
+
+class LexerHelper extends Definicoes {
+
+  //Acoes
+  def erro(msg: String) = { println("Erro: " + msg); sys.exit(1) }
+
+  //TAKES
+  def takeOp(input:List[Char],acc:String = ""):String = input match {
+    case Nil => acc
+    case op :: rest if ehOp(op) =>
+      takeOp(rest,acc+op)
+    case notOp :: rest if !ehOp(notOp) =>
+      acc
+  }
+  def take(input: List[Char], acc: String = ""): String = {
+    def isNotASeparatorNorOperator: Boolean  = ! (ehSeparador(input.head) || ehOp(input.head))
+    input match { 
+      case in :: _ if ehLetra(in) || ehNum(in) =>
+        take(input.tail, acc + in)
+      case _ =>
+        acc
+    }
+  }
+  
+  //CASOS
+  def casoLetra(input: List[Char]):Token = {
+    val palavra = take(input)
+    val forwardInput = input.drop(palavra.size)
+    val valido = palavra.forall
+           { ch => ehLetra(ch) || ehNum(ch) }
+    val tipo = if (ehPalavraReservada(palavra)) "reservada" else "identificador"
+    Token(palavra, tipo)
+  }
+  def casoOp(input: List[Char]):Token = {
+    val fullOp = takeOp(input)
+    fullOp match {
+      case ":" => Token(":","dois pontos")
+      case op if operadorValido(fullOp) => Token(fullOp,"operador")
+      case _ => erro("operador invalido" + fullOp)
+    }
+  }
+}
\ No newline at end of file