Skip to content
Snippets Groups Projects
Commit 9241bfbe authored by Lior Spach's avatar Lior Spach
Browse files

c1

parent a1a9aeb7
No related branches found
No related tags found
No related merge requests found
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment