parser2a.scala
changeset 64 2d625418c011
parent 62 5988e44ea048
child 71 7717f20f0504
equal deleted inserted replaced
63:dff4b062a8a9 64:2d625418c011
    92     case T_NUM(s)::ts => Set((s.toInt, ts)) 
    92     case T_NUM(s)::ts => Set((s.toInt, ts)) 
    93     case _ => Set ()
    93     case _ => Set ()
    94   }
    94   }
    95 }
    95 }
    96 
    96 
    97 lazy val E: Parser[Int] = (T ~ T_OP("+") ~ E) ==> { case ((x, y), z) => x + z } || T  // start symbol
    97 lazy val E: Parser[Int] = (T ~ T_OP("+") ~ E) ==> { case ((x, y), z) => x + z } || T  
    98 lazy val T: Parser[Int] = (F ~ T_OP("*") ~ T) ==> { case ((x, y), z) => x * z } || F
    98 lazy val T: Parser[Int] = (F ~ T_OP("*") ~ T) ==> { case ((x, y), z) => x * z } || F
    99 lazy val F: Parser[Int] = (T_LPAREN ~> E <~ T_RPAREN) || NumParser
    99 lazy val F: Parser[Int] = (T_LPAREN ~> E <~ T_RPAREN) || NumParser
   100    
   100    
   101 println(E.parse_all(tokenizer(lexing_rules, "1 + 2 + 3")))
   101 println(E.parse_all(tokenizer(lexing_rules, "1 + 2 + 3")))
   102 println(E.parse_all(tokenizer(lexing_rules, "1 + 2 * 3")))
   102 println(E.parse_all(tokenizer(lexing_rules, "1 + 2 * 3")))