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

Take function, separacao de funcoes booleanas e conjuntos

parent 16a27f0a
No related branches found
No related tags found
No related merge requests found
...@@ -3,12 +3,15 @@ ...@@ -3,12 +3,15 @@
println("started...") println("started...")
case class Token(val value:String, val func:String) case class Token(val value:String, val func:String)
// Conjuntos
val palavrasReservadas = List("begin", "end", "function", "procedure", "var", "program") val palavrasReservadas = List("begin", "end", "function", "procedure", "var", "program")
val letras = List.concat('a' to 'z','A' to 'Z',"_")
val numeros = ('0' to '9').toList
// Conjuntos //Funcoes booleanas
val num = (c:Char) => ('0' to '9').contains(c) val num = (c:Char) => numeros.contains(c)
val op = (c:Char) => "+-*/=:".contains(c) val op = (c:Char) => "+-*/=:".contains(c)
val letra = (c:Char) => ('a' to 'z').contains(c) || ('A' to 'Z').contains(c) || c=='_' val letra = (c:Char) => letras.contains(c)
val espacoLinTab = (c:Char) => c==' ' || c=='\t' || c=='\n' val espacoLinTab = (c:Char) => c==' ' || c=='\t' || c=='\n'
val palavraReservada = (s:String) => palavrasReservadas.contains(s) val palavraReservada = (s:String) => palavrasReservadas.contains(s)
...@@ -22,12 +25,9 @@ val erro = (msg:String) => {println("Erro: "+msg); sys.exit(1)} ...@@ -22,12 +25,9 @@ val erro = (msg:String) => {println("Erro: "+msg); sys.exit(1)}
def take(iter:BufferedIterator[Char]) = { def take(iter:BufferedIterator[Char]) = {
var acc="" var acc=""
while ( //TODO while (iter.hasNext && ! espacoLinTab(iter.head) && ! op(iter.head))
val c = iter.head acc += iter.next
if (! espacoLinTab(c) && ! op(c)) { acc
acc += c
}
}
} }
def atomo(str:String) { def atomo(str:String) {
...@@ -38,7 +38,6 @@ def atomo(str:String) { ...@@ -38,7 +38,6 @@ def atomo(str:String) {
case c if num(c) => //NUMERO case c if num(c) => //NUMERO
val acc = c + take(iter) val acc = c + take(iter)
println("prox: "+iter.head)
verificaNumero(acc) verificaNumero(acc)
(acc,"numero") (acc,"numero")
...@@ -59,7 +58,7 @@ def atomo(str:String) { ...@@ -59,7 +58,7 @@ def atomo(str:String) {
case c if espacoLinTab(c) => /*pula*/ case c if espacoLinTab(c) => /*pula*/
iter.dropWhile(espacoLinTab) iter.dropWhile(espacoLinTab)
"" ""
case erroCh => erro(erroCh+"") case erroCh => erro(erroCh+"")//TODO:which line error occurred?
}) })
} }
} }
......
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