- Notifications
You must be signed in to change notification settings - Fork131
simple combinator-based parsing for Scala. formerly part of the Scala standard library, now a separate community-maintained module
License
scala/scala-parser-combinators
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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.
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.
- Current API
- TheGetting Started guide
- A more complicated example,Building a lexer and parser with Scala's Parser Combinators
- "Combinator Parsing", chapter 33 ofProgramming 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.
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 inscala/scala-module-dependency-sample.
Scala-parser-combinators is also available for Scala.js and Scala Native:
libraryDependencies += "org.scala-lang.modules" %%% "scala-parser-combinators" % <version>
importscala.util.parsing.combinator._caseclassWordFreq(word:String,count:Int) {overridedeftoString=s"Word <$word> occurs with frequency$count"}classSimpleParserextendsRegexParsers {defword:Parser[String]="""[a-z]+""".r^^ { _.toString }defnumber:Parser[Int]="""(0|[1-9]\d*)""".r^^ { _.toInt }deffreq:Parser[WordFreq]= word~ number^^ {case wd~ fr=>WordFreq(wd,fr) }}objectTestSimpleParserextendsSimpleParser {defmain(args:Array[String])= { parse(freq,"johnny 121")match {caseSuccess(matched,_)=> println(matched)caseFailure(msg,_)=> println(s"FAILURE:$msg")caseError(msg,_)=> println(s"ERROR:$msg") } }}
For a detailed unpacking of this example seeGetting Started.
- See theScala Developer Guidelines for general contributing guidelines
- Have a look atexisting issues
- Ask questions and discussin GitHub Discussions
- Feel free to open draft pull requests with partially completed changes, to get feedback.
About
simple combinator-based parsing for Scala. formerly part of the Scala standard library, now a separate community-maintained module
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.