scala-parser-combinators
Scala Standard Parser Combinator Library
This library is now community-maintained. If you are interested in helping please contact @gourlaysama or mention it on Gitter.
As of Scala 2.11, this library is a separate jar that can be omitted from Scala projects that do not use Parser Combinators.
Documentation
- Current API
- The Getting Started guide
- A more complicated example, Building a lexer and parser with Scala's Parser Combinators
- "Combinator Parsing", chapter 33 of Programming in Scala, Third Edition, shows how to use this library to parse arithmetic expressions and JSON. The second half of the chapter examines how the library is implemented.
Adding an SBT dependency
To depend on scala-parser-combinators in SBT, add something like this to your build.sbt:
libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.1.1"
To support multiple Scala versions, see the example in scala/scala-module-dependency-sample.
Example
import scala.util.parsing.combinator._
case class WordFreq(word: String, count: Int) {
override def toString = s"Word <$word> occurs with frequency $count"
}
class SimpleParser extends RegexParsers {
def word: Parser[String] = """[a-z]+""".r ^^ { _.toString }
def number: Parser[Int] = """(0|[1-9]\d*)""".r ^^ { _.toInt }
def freq: Parser[WordFreq] = word ~ number ^^ { case wd ~ fr => WordFreq(wd,fr) }
}
object TestSimpleParser extends SimpleParser {
def main(args: Array[String]) = {
parse(freq, "johnny 121") match {
case Success(matched,_) => println(matched)
case Failure(msg,_) => println(s"FAILURE: $msg")
case Error(msg,_) => println(s"ERROR: $msg")
}
}
}
For a detailed unpacking of this example see Getting Started.
ScalaJS support
Scala-parser-combinators directly supports Scala.js 0.6+:
libraryDependencies += "org.scala-lang.modules" %%% "scala-parser-combinators" % "1.1.1"
Issues
Many old issues from the Scala JIRA issue tracker have been migrated here, but not all of them. Community assistance identifying and migrating still-relevant issues is welcome. See this page for details.
Contributing
- See the Scala Developer Guidelines for general contributing guidelines
- Have a look at existing issues
- Ask questions and discuss on Gitter