progs/parser-combinators/comb1.sc
changeset 948 6bb67c2dcfd3
parent 941 66adcae6c762
child 954 eda0ccf56c72
--- a/progs/parser-combinators/comb1.sc	Sun Oct 29 00:06:30 2023 +0100
+++ b/progs/parser-combinators/comb1.sc	Sun Oct 29 13:05:09 2023 +0000
@@ -23,7 +23,6 @@
 // parser combinators
 
 
-
 // alternative parser
 class AltParser[I : IsSeq, T](p: => Parser[I, T], 
                               q: => Parser[I, T]) extends Parser[I, T] {
@@ -96,9 +95,11 @@
   def map[S](f: => T => S) = new MapParser[I, T, S](p, f)
 }
 
+// simple example of transforming the 
+// result into capital letters
 def toU(s: String) = s.map(_.toUpper)
 
-(p"ELSE").map(toU(_)).parse("ELSEifthen")  
+(p"else").map(toU(_)).parse("elseifthen")  
 
 // these implicits allow us to use an infix notation for
 // sequences and alternatives; we also can write the usual
@@ -112,6 +113,7 @@
 
 
 // A parser for palindromes (just returns them as string)
+//  since the parser is recursive it needs to be lazy
 lazy val Pal : Parser[String, String] = {
    (p"a" ~ Pal ~ p"a").map{ case ((x, y), z) => s"$x$y$z" } || 
    (p"b" ~ Pal ~ p"b").map{ case ((x, y), z) => s"$x$y$z" } ||