diff --git a/sources/zweic/Parser.scala b/sources/zweic/Parser.scala index 6b898bb..1c4a500 100755 --- a/sources/zweic/Parser.scala +++ b/sources/zweic/Parser.scala @@ -338,9 +338,9 @@ * MyTerm = [ NegateOp ] Factor [ ProdOp Term ] */ private def term(): Expr = { - var left:Expr; + var left:Expr = null; if ( token == SUB || token == NOT ) { - val op = token; + val op = Operators.token2op(token); nextToken; val e = factor(); left = Unop(op, e); @@ -355,9 +355,16 @@ return left; } - private def string(str: String): New = str match { - case st::xs => return new New(Name("Cons"), IntLit(Int(st))::string(xs)::Nil) - case _ => return new New(Name("Nil"), Nil) + + def string2List(s: String): List[Char] = + if (s.length() == 0) + Nil + else + s.charAt(0) :: string2List(s.substring(1)); + + private def _string(str: String): New = { + string2List(chars).toList.foldRight(New(Name("Nil"), Nil))((x, xs) => + New(Name("Cons"), IntLit(x.asInstanceOf[Int])::List(xs))) } /** @@ -369,7 +376,7 @@ token match { case IDENT => nextToken; rval = Ident(Name(chars)); case NUMBER => nextToken; rval = IntLit(Integer.parseInt(chars)); - case STRING => nextToken; rval = string(name); + case STRING => nextToken; rval = _string(name); case TRUE => nextToken; rval = IntLit(1); case FALSE => nextToken; rval = IntLit(0); case THIS => nextToken; rval = Ident(Name("this"));