diff --git a/sources/zweic/Parser.scala b/sources/zweic/Parser.scala index e05a133..f2ed177 100755 --- a/sources/zweic/Parser.scala +++ b/sources/zweic/Parser.scala @@ -57,23 +57,31 @@ } else false; - override def nextToken: Unit = pushedBack match { - case Some(Triple(p, c, t)) => - token = t; - chars = c; - pos = p; - pushedBack = None; - case _ => return super.nextToken; + override def nextToken: Unit = { + //Console.println(token); + pushedBack match { + case Some(Triple(p, c, t)) => + token = t; + chars = c; + pos = p; + pushedBack = None; + case _ => return super.nextToken; + } } def peekAhead: Token = pushedBack match { - case Some(Triple(p, c, t)) => return t; + case Some(Triple(p, c, t)) => + //Console.println("peekAhead: old:"+t); + return t; case _ => + //Console.println("peekAhead: new:"+token); + //Console.println("peekAhead: pb:"+pushedBack); val savedToken = token; val savedChars = chars; val savedPos = pos; - val rval = token; nextToken; + val rval = token; + //Console.println("peekAhead: pb:"+pushedBack); pushedBack = Some(Triple(pos, chars, token)); token = savedToken; chars = savedChars; @@ -126,6 +134,7 @@ * "(" [Formal {"," Formal}] ")" Block) */ private def member(): Tree = { + //Console.println("member: "+token); formal(); if (check (SEMICOLON)) { return null; @@ -139,8 +148,10 @@ formal(); } } + //Console.println("member: before accept(RPAREN):"+token); accept (RPAREN); - block; + //Console.println("member: before block:"+token); + block(); return null; } } @@ -149,6 +160,7 @@ * Formal = Type ident */ private def formal(): Tree = { + //Console.println("formal: "+token); type1(); accept(IDENT); return null; @@ -158,6 +170,7 @@ * Block = "{" {Statements} ["return" Expression] "}" */ private def block(): Tree = { + //Console.println("block: "+token); accept (LACCOLADE); while (token != RETURN && token != RACCOLADE) { statement(); @@ -189,9 +202,12 @@ * | "printChar" "(" Expression ")" ";" */ private def statement(): Tree = { + //Console.println("statement: "+token); if (token == IDENT) { + //Console.println("statement: 1.ident: "+token); peekAhead match { case IDENT => + //Console.println("statement: peek-ident: "+token); //type definition and affection formal(); accept(EQUALS); @@ -199,6 +215,7 @@ accept(SEMICOLON); case EQUALS => + //Console.println("statement: peek-equals: "+token); //affection accept(IDENT); accept(EQUALS); @@ -206,6 +223,7 @@ accept(SEMICOLON); case _ => + //Console.println("statement: peek-_: "+token); //expression expression(); accept(SEMICOLON); @@ -254,15 +272,20 @@ * Expression = "if" "(" Expression ")" Expression [ "else" Expression ] */ private def expression(): Tree = { - accept(IF); - accept(LPAREN); - expression(); - accept(RPAREN); - expression(); - if ( check(ELSE) ) { + //Console.println("expression: "+token); + if ( check(IF) ) { + accept(LPAREN); expression(); + accept(RPAREN); + expression(); + if ( check(ELSE) ) { + expression(); + } + return null; + } else { + cmpExpression(); + return null; } - return null; } /** @@ -270,6 +293,7 @@ * MyCmpExpression = SumExpression [ CompOp SumExpression ] */ private def cmpExpression(): Tree = { + //Console.println("cmpExpression: "+token); sumExpression(); if ( token == EQ || token == NE || token == LT || token == GT || token == LE || token == GE ) { @@ -284,6 +308,7 @@ * MySumExpression = Term [ SumOp SumExpression ] */ private def sumExpression(): Tree = { + //Console.println("sumExpression: "+token); term(); if ( token == ADD || token == SUB || token == OR ) { sumOp(); @@ -297,6 +322,7 @@ * MyTerm = [ NegateOp ] Factor [ ProdOp Term ] */ private def term(): Tree = { + //Console.println("term: "+token); if ( token == SUB || token == NOT ) { nextToken; } @@ -350,7 +376,7 @@ || token == READCHAR || token == LPAREN || token == NEW || token == LACCOLADE ) { expression(); - while ( token == PERIOD ) { + while ( check(PERIOD) ) { expression(); } }