Skip to content

Instantly share code, notes, and snippets.

@decretist
Forked from travisbrown/parser-demo.scala
Last active August 29, 2015 14:11
Show Gist options
  • Save decretist/fa46be3a6f28f9946469 to your computer and use it in GitHub Desktop.
Save decretist/fa46be3a6f28f9946469 to your computer and use it in GitHub Desktop.
sealed trait Element
case class Tag(name: String, attr: String) extends Element
case class Header(text: String) extends Element
case class Plain(text: String) extends Element
import scala.util.parsing.combinator._
object parse extends RegexParsers {
override def skipWhitespace = false
def tag: Parser[Tag] = ("<" ~> "\\S+".r <~ "\\s".r) ~ "[^\\s>]+".r <~ ">" ^^ {
case name ~ attr => Tag(name, attr)
}
def header: Parser[Header] = "\\-".r ~> "[^+]*".r <~ "+" ^^ (Header(_))
def plain: Parser[Plain] = "[^<>\\-\\+]+".r ^^ (Plain(_))
def elements: Parser[List[Element]] = rep(tag | header | plain)
def apply(s: String) = parseAll(elements, s)
}
val text = io.Source.fromFile(
"corrections/edF.txt"
).getLines.take(10000).mkString(" ")
parse(text).get foreach println
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment