Skip to content

roboz0r/XParsec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Feb 8, 2025
85fa6a7 · Feb 8, 2025

History

12 Commits
Jan 25, 2025
Feb 8, 2025
Jan 21, 2025
Feb 8, 2025
Feb 8, 2025
Jan 11, 2025
Jan 25, 2025
Jan 11, 2025
Jan 25, 2025
Jan 11, 2025
Feb 8, 2025
Jan 21, 2025
Feb 8, 2025

Repository files navigation

XParsec

XParsec is a parser combinator library for F#

It aims to be a successor to the popular FParsec library with several important differences:

  • Generalization over collection and token types

With XParsec all common contiguous collections string 'T array ResizeArray<'T> ImmutableArray<'T> and Stream can be parsed with essentially the same code.

  • Pure F# implementation

F# is a great .NET language but with the power of Fable, a powerful JavaScript language too. By implementing XParsec in completely in F#, I aim to provide an equally robust and easy to use parsing library for Fable target languages.

  • More Performant

By making use of newer F# & .NET technologies like [<InlineIfLambda>] Span<'T> and struct unions I aim to make XParsec competitive with imperative parsing libraries while remaining terse and easy to reason about.

Initial results are encoraging with roughly 2/3 the execution time and 1/4 the allocations for the equivalent parser code parsing a single large json file.

Method Mean Error StdDev Gen0 Gen1 Gen2 Allocated
XParsecJson 41.40 ms 0.205 ms 0.182 ms 1000.0000 916.6667 - 50.91 MB
FParsecJson 67.38 ms 1.247 ms 1.106 ms 4375.0000 875.0000 250.0000 200.98 MB
  • Simplified operator precedence parsing
  • No line number tracking by default

Running Tests

.NET

dotnet test

Fable JS

npm run test

TODO

  • ByteParsers module
  • Fable JS compatibility
  • Other Fable targets compatibility
  • Multi-token operator parsing
  • Performance benchmarks and optimization
  • Complete FParsec API coverage
  • Tests with complex grammars
  • Improvements to error messages
  • Release to NuGet

About

XParsec is a parser combinator library for F#

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages