From 9241bfbe3127bcd76ee7d39ffb740b215690acaf Mon Sep 17 00:00:00 2001
From: Lior Spach <ls12@inf.ufpr.br>
Date: Wed, 20 May 2015 00:22:17 -0300
Subject: [PATCH] c1

---
 compiler/LexerHelper.scala | 44 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)
 create mode 100644 compiler/LexerHelper.scala

diff --git a/compiler/LexerHelper.scala b/compiler/LexerHelper.scala
new file mode 100644
index 0000000..581fcae
--- /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
-- 
GitLab