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