# HG changeset patch # User Christian Urban # Date 1483801005 0 # Node ID 4772dff2ff896ad404eb148b38edb9ec58f4a3d7 # Parent e5df48ff70331b74890c20c5a77d9aeaabd3d777# Parent d6babe14a3a2948a44990eab11594b67409ab2cd updated diff -r e5df48ff7033 -r 4772dff2ff89 progs/comb1.scala --- a/progs/comb1.scala Sat Jan 07 14:52:26 2017 +0000 +++ b/progs/comb1.scala Sat Jan 07 14:56:45 2017 +0000 @@ -92,14 +92,15 @@ // arithmetic expressions lazy val E: Parser[String, Int] = - (F ~ "*" ~ F) ==> { case ((x, y), z) => x * z } || F + (T ~ "+" ~ E) ==> { case ((x, y), z) => x + z } || + (T ~ "-" ~ E) ==> { case ((x, y), z) => x - z } || T +lazy val T: Parser[String, Int] = + ((F ~ "*" ~ T) ==> { case ((x, y), z) => x * z } || F) lazy val F: Parser[String, Int] = - ((T ~ "+" ~ T) ==> { case ((x, y), z) => x + z } || - (T ~ "-" ~ T) ==> { case ((x, y), z) => x - z } || T) -lazy val T: Parser[String, Int] = ("(" ~ E ~ ")") ==> { case ((x, y), z) => y } || NumParser -println(E.parse("1*2+3")) +println(E.parse("4*2+3")) +println(E.parse_all("4*2+3")) println(E.parse("1 + 2 * 3")) println(E.parse_all("(1+2)+3")) println(E.parse_all("1+2+3")) // this is not parsed, because of diff -r e5df48ff7033 -r 4772dff2ff89 progs/while.scala --- a/progs/while.scala Sat Jan 07 14:52:26 2017 +0000 +++ b/progs/while.scala Sat Jan 07 14:56:45 2017 +0000 @@ -87,6 +87,19 @@ } } +def len(xs: List[(Int, Int)]): Int = xs match { + case Nil => 0 + case (1, x)::xs => len(xs) + 1 + case (_, x)::xs => len(xs) +} + +def fst(p: (Int, Int)): Int = p match { + case Nil => 0 + case (1, x)::xs => len(xs) + 1 + case (_, x)::xs => len(xs) +} + + // arithmetic expressions lazy val AExp: Parser[List[Token], AExp] = diff -r e5df48ff7033 -r 4772dff2ff89 slides/slides06.pdf Binary file slides/slides06.pdf has changed