solution/cw5/fun_parser.sc
changeset 873 c885ed3c39cf
parent 868 b0acb8741b16
equal deleted inserted replaced
872:afd9dd575fc8 873:c885ed3c39cf
   153 lazy val T: Parser[List[Token], Exp] = 
   153 lazy val T: Parser[List[Token], Exp] = 
   154   (F ~ T_OP("*") ~ T) ==> { case x ~ _ ~ z => Aop("*", x, z): Exp } || 
   154   (F ~ T_OP("*") ~ T) ==> { case x ~ _ ~ z => Aop("*", x, z): Exp } || 
   155   (F ~ T_OP("/") ~ T) ==> { case x ~ _ ~ z => Aop("/", x, z): Exp } || 
   155   (F ~ T_OP("/") ~ T) ==> { case x ~ _ ~ z => Aop("/", x, z): Exp } || 
   156   (F ~ T_OP("%") ~ T) ==> { case x ~ _ ~ z => Aop("%", x, z): Exp } || F
   156   (F ~ T_OP("%") ~ T) ==> { case x ~ _ ~ z => Aop("%", x, z): Exp } || F
   157 lazy val F: Parser[List[Token], Exp] = 
   157 lazy val F: Parser[List[Token], Exp] = 
   158   (IdParser ~ T_LPAREN ~ T_RPAREN) ==> 
       
   159     { case x ~ _ ~ _ => Call(x, Nil): Exp } || 
       
   160   (IdParser ~ T_LPAREN ~ T_RPAREN) ==> { case x ~ _ ~ _ => Call(x, Nil): Exp } ||
   158   (IdParser ~ T_LPAREN ~ T_RPAREN) ==> { case x ~ _ ~ _ => Call(x, Nil): Exp } ||
   161   (IdParser ~ T_LPAREN ~ ListParser(Exp, T_COMMA) ~ T_RPAREN) ==> { case x ~ _ ~ z ~ _ => Call(x, z): Exp } ||
   159   (IdParser ~ T_LPAREN ~ ListParser(Exp, T_COMMA) ~ T_RPAREN) ==> { case x ~ _ ~ z ~ _ => Call(x, z): Exp } ||
   162   (T_LPAREN ~ Exp ~ T_RPAREN) ==> { case _ ~ y ~ _ => y: Exp } || 
   160   (T_LPAREN ~ Exp ~ T_RPAREN) ==> { case _ ~ y ~ _ => y: Exp } || 
   163   IdParser ==> { case x => Var(x): Exp } || 
   161   IdParser ==> { case x => Var(x): Exp } || 
   164   NumParser ==> { case x => Num(x): Exp } ||
   162   NumParser ==> { case x => Num(x): Exp } ||