XParsec 0.0.3
See the version list below for details.
dotnet add package XParsec --version 0.0.3
NuGet\Install-Package XParsec -Version 0.0.3
<PackageReference Include="XParsec" Version="0.0.3" />
<PackageVersion Include="XParsec" Version="0.0.3" />
<PackageReference Include="XParsec" />
paket add XParsec --version 0.0.3
#r "nuget: XParsec, 0.0.3"
#:package XParsec@0.0.3
#addin nuget:?package=XParsec&version=0.0.3
#tool nuget:?package=XParsec&version=0.0.3
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
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- FSharp.Core (>= 9.0.201)
- System.Collections.Immutable (>= 9.0.3)
-
net8.0
- FSharp.Core (>= 9.0.201)
- System.Collections.Immutable (>= 9.0.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.