All Projects → scala → Scala Parser Combinators

scala / Scala Parser Combinators

Licence: apache-2.0
simple combinator-based parsing for Scala. formerly part of the Scala standard library, now a separate community-maintained module

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Scala Parser Combinators

Funcparserlib
Recursive descent parsing library for Python based on functional combinators
Stars: ✭ 250 (-52.2%)
Mutual labels:  parser-combinators, parsing
Pidgin
C#'s fastest parser combinator library
Stars: ✭ 469 (-10.33%)
Mutual labels:  parser-combinators, parsing
autumn
A Java parser combinator library written with an unmatched feature set.
Stars: ✭ 112 (-78.59%)
Mutual labels:  parsing, parser-combinators
Pegtl
Parsing Expression Grammar Template Library
Stars: ✭ 1,295 (+147.61%)
Mutual labels:  parser-combinators, parsing
Angstrom
Parser combinators built for speed and memory efficiency
Stars: ✭ 434 (-17.02%)
Mutual labels:  parser-combinators, parsing
Parjs
JavaScript parser-combinator library
Stars: ✭ 145 (-72.28%)
Mutual labels:  parser-combinators, parsing
metal
A Java library for parsing binary data formats, using declarative descriptions.
Stars: ✭ 13 (-97.51%)
Mutual labels:  parsing, parser-combinators
Lug
Parsing expression grammar (PEG) embedded domain specific language and parsing machine for C++17
Stars: ✭ 44 (-91.59%)
Mutual labels:  parser-combinators, parsing
parser-lang
A parser combinator library with declarative superpowers
Stars: ✭ 25 (-95.22%)
Mutual labels:  parsing, parser-combinators
Ramble
A R parser based on combinatory parsers.
Stars: ✭ 19 (-96.37%)
Mutual labels:  parsing, parser-combinators
Parsing With Haskell Parser Combinators
🔍 A step-by-step guide to parsing using Haskell parser combinators.
Stars: ✭ 72 (-86.23%)
Mutual labels:  parser-combinators, parsing
parser-combinators
Lightweight package providing commonly useful parser combinators
Stars: ✭ 41 (-92.16%)
Mutual labels:  parsing, parser-combinators
Parser Combinators From Scratch
Code that accompanies the series
Stars: ✭ 56 (-89.29%)
Mutual labels:  parser-combinators, parsing
Combine
A parser combinator library for Elixir projects
Stars: ✭ 174 (-66.73%)
Mutual labels:  parser-combinators, parsing
Pyparsing
Python library for creating PEG parsers
Stars: ✭ 1,052 (+101.15%)
Mutual labels:  parser-combinators, parsing
Syntax
Write value-driven parsers quickly in Swift with an intuitive SwiftUI-like DSL
Stars: ✭ 134 (-74.38%)
Mutual labels:  parsing, parser-combinators
Comby
A tool for structural code search and replace that supports ~every language.
Stars: ✭ 912 (+74.38%)
Mutual labels:  parser-combinators, parsing
ParsecSharp
The faster monadic parser combinator library for C#
Stars: ✭ 23 (-95.6%)
Mutual labels:  parsing, parser-combinators
loquat
Monadic parser combinators for JavaScript / TypeScript
Stars: ✭ 47 (-91.01%)
Mutual labels:  parsing, parser-combinators
Pom
PEG parser combinators using operator overloading without macros.
Stars: ✭ 310 (-40.73%)
Mutual labels:  parser-combinators, parsing

scala-parser-combinators

Scala Standard Parser Combinator Library

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

The latest stable release is 1.1.2.

Experimental milestone 1.2.x milestones are available that include Scala 3 support.

Documentation

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.2"

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" % "1.1.2"

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

Alternatives

A number of other parsing libraries for Scala are available; see https://github.com/lauris/awesome-scala#parsing

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].