org.scala-lang.modules:scala-parser-combinators_2.11.0-RC3

1.0.1last stable release 11 years ago
Complexity Score
Low
Open Issues
N/A
Dependent Projects
4

License

  • BSD-3-Clause
    • Yesattribution
    • Permissivelinking
    • Permissivedistribution
    • Permissivemodification
    • Nopatent grant
    • Yesprivate use
    • Permissivesublicensing
    • Notrademark grant

Readme

scala-parser-combinators

This was originally part of the Scala standard library, but is now community-maintained, under the guidance of the Scala team at Akka (formerly Lightbend). If you are interested in joining the maintainers team, please contact @Philippus or @SethTisue.

Choosing a parsing library

This library’s main strengths are:

  • Stability. It’s been around and in wide use for more than a decade.
  • The codebase is modest in size and its internals are fairly simple.
  • It’s plain vanilla Scala. No macros, code generation, or other magic is involved.
  • Multiple versions of Scala (2.12, 2.13, 3) are supported on all back ends (JVM, JS, Native).

Its main weaknesses are:

  • Performance. If you are ingesting large amounts of data, you may want something faster.
  • Minimal feature set.
  • Inflexible, unstructured error reporting.

A number of other parsing libraries for Scala are available – see list on Scaladex.

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 apply this library to e.g. parsing of arithmetic expressions. 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" % <version>

To support multiple Scala versions, see the example in scala/scala-module-dependency-sample.

Scala.js and Scala Native

Scala-parser-combinators is also available for Scala.js and Scala Native:

libraryDependencies += "org.scala-lang.modules" %%% "scala-parser-combinators" % <version>

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.

Contributing

  • See the Scala Developer Guidelines for general contributing guidelines
  • Have a look at existing issues
  • Ask questions and discuss in GitHub Discussions
  • Feel free to open draft pull requests with partially completed changes, to get feedback.

Dependencies

Loading dependencies...

CVE IssuesActive
0
Scorecards Score
5.30
Test Coverage
No Data
Follows Semver
Yes
Github Stars
656
Dependenciestotal
3
DependenciesOutdated
2
DependenciesDeprecated
0
Threat Modelling
No Data
Repo Audits
No Data

Learn how to distribute this package in your own private Maven registry

mvn install org.scala-lang.modules:scala-parser-combinators_2.11.0-RC3
Processing...
Done

1 Releases