equal
  deleted
  inserted
  replaced
  
    
    
    10 abstract class Parser[I : IsSeq, T] { | 
    10 abstract class Parser[I : IsSeq, T] { | 
    11   def parse(ts: I): Set[(T, I)]  | 
    11   def parse(ts: I): Set[(T, I)]  | 
    12   | 
    12   | 
    13   def parse_all(ts: I) : Set[T] =  | 
    13   def parse_all(ts: I) : Set[T] =  | 
    14     for ((head, tail) <- parse(ts);   | 
    14     for ((head, tail) <- parse(ts);   | 
    15         if (tail.isEmpty)) yield head  | 
    15         if tail.isEmpty) yield head  | 
    16 }  | 
    16 }  | 
    17   | 
    17   | 
    18 class SeqParser[I : IsSeq, T, S](p: => Parser[I, T],   | 
    18 class SeqParser[I : IsSeq, T, S](p: => Parser[I, T],   | 
    19                                  q: => Parser[I, S]) extends Parser[I, (T, S)] { | 
    19                                  q: => Parser[I, S]) extends Parser[I, (T, S)] { | 
    20   def parse(sb: I) =   | 
    20   def parse(sb: I) =   | 
   160    NumParserInt)  | 
   160    NumParserInt)  | 
   161   | 
   161   | 
   162 //println(EL.parse_all("1+2+3")) | 
   162 //println(EL.parse_all("1+2+3")) | 
   163   | 
   163   | 
   164   | 
   164   | 
   165   | 
         | 
   166   | 
         | 
   167 // non-ambiguous vs ambiguous grammars  | 
   165 // non-ambiguous vs ambiguous grammars  | 
   168   | 
   166   | 
   169 // ambiguous  | 
   167 // ambiguous  | 
   170 lazy val S : Parser[String, String] =  | 
   168 lazy val S : Parser[String, String] =  | 
   171   ("1" ~ S ~ S) ==> { case ((x, y), z) => x + y + z } || "" | 
   169   ("1" ~ S ~ S) ==> { case ((x, y), z) => x + y + z } || "" | 
   203 (One ~ One).parse("111") | 
   201 (One ~ One).parse("111") | 
   204 (One ~ One ~ One).parse("111") | 
   202 (One ~ One ~ One).parse("111") | 
   205 (One ~ One ~ One ~ One).parse("1111") | 
   203 (One ~ One ~ One ~ One).parse("1111") | 
   206   | 
   204   | 
   207 (One || Two).parse("111") | 
   205 (One || Two).parse("111") | 
   208   | 
         | 
   209   | 
         | 
   210   | 
   206   | 
   211   | 
   207   | 
   212 // a problem with the arithmetic expression parser -> gets   | 
   208 // a problem with the arithmetic expression parser -> gets   | 
   213 // slow with deep nestedness  | 
   209 // slow with deep nestedness  | 
   214 E.parse("1") | 
   210 E.parse("1") |