Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 17th, 2012  |  syntax: None  |  size: 0.89 KB  |  hits: 11  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Discarding the remaining input using parser combinators
  2. val input = """
  3. 0)
  4. blah1
  5. blah2
  6. blah3
  7. 1)
  8. blah4
  9. blah5
  10. END
  11. blah6
  12. """
  13.        
  14. object Pars extends RegexParsers {
  15.   def strings: Parser[List[String]] = rep(str) <~ end
  16.   def str:     Parser[String]       = ".*".r
  17.   def end:     Parser[String]       = "END" <~ rep(".*".r)
  18. }
  19.  
  20. Pars.parseAll(Pars.strings, input)
  21.        
  22. rep(".*".r)
  23.        
  24. object Pars extends RegexParsers {
  25.   def strings: Parser[List[String]] =
  26.     ( "END" ^^^ Nil
  27.     | ".+".r ~ strings ^^ { case head ~ tail => head :: tail }
  28.     )
  29. }
  30.        
  31. object Pars extends RegexParsers {
  32.   def strings: Parser[List[String]] = rep(str) <~ "END"
  33.   def str:     Parser[String]       = """.*r?n""".r ^? {
  34.     case s if !(s matches """ENDr?n""") => s.replaceAll("""[rn]""", "")
  35.   }
  36. }
  37.  
  38. Pars.parse(Pars.strings, input) // note parse, not parseAll
  39.   //[9.4] parsed: List(0), blah1, blah2, blah3, 1), blah4, blah5)