FastParsers is a Scala parser library which uses macros to transform easy-to-write parser combinators into efficient recursive-descent backtracking parsers. The generated parsers are about 20x faster than Scala's parser combinator library even though its interface stay about the same.
Example
Here is an example of a basic JSON parser
val jsonParser = FastParser {
def value: Parser[Any] = obj | arr | stringLit |
decimalNumber | "null" | "true" | "false"
def obj: Parser[Any] = lit("{") ~> repsep (member, ",") <~ "}"
def arr: Parser[Any] = lit("[") ~> repsep (value , ",") <~ "]"
def member: Parser[Any] = stringLit ~ (lit(":") ~> value)
}
This generate a Parser Object which allow you to call any of the transformed rules.
val cnt = "{\"firstName \": \"John\" , \"age\": 25}"
jsonParser.value (cnt) match {
case Success ( result ) =>
println ("success : " + result )
case Failure ( error ) =>
println (" failure : " + error )
}
How to use
A snapshot is available on Sonatype. To use it with SBT, add the following lines in your build:
libraryDependencies += "com.github.begeric" % "fastparsers_2.11" % "0.1-SNAPSHOT"
resolvers += Resolver.sonatypeRepo("snapshots")
More information
For a more comprehensive presentation please take a look at the presentation slides.
To have a better understanding of the internals please read the paper describing the implementation.