- Use a
long
to track source offsets (not anint
). This enables using Pidgin with large inputs.
Parser.CurrentOffsetLong
(building on the above). Thanks @wakuflair!
- Overloads for parsing from
ITokenStream
s andParseState
s have been made public as originally intended. Thanks @katherinefluxinc!
- Support for AOT/trimming deployment scenarios.
- A critical bug in
Try()
which had been broken in 3.2.0.- Thanks to @PJB3005 for reporting this bug in #140
- Support for Source Link
- Four new combinators:
ManyThen
,AtLeastOnceThen
,SkipManyThen
, andSkipAtLeastOnceThen
- These are versions of
Until
,AtLeastOnceUntil
,SkipUntil
, andSkipAtLeastOnceUntil
which return the terminator. - Thanks to @chyyran and @atrauzzi, who asked for this in #121
- These are versions of
- Improved documentation for
ExpressionParser
, now including an example.- Thanks to @hswami, who asked for this in #113
- Removed some Nuget dependencies which are no longer required (since they are part of .NET 5).
- A pair of parsers for enum values,
Enum
andCIEnum
. Thanks @RomanSoloweow!
- Removed support for .NET 4 and .NET Core 3.1. Pidgin is now a .NET 5 library.
- Published the (previously internal)
TokenStream
API. You can now write parsers which consume custom input streams. - Support for resumable parsing, through the
ResumableTokenStream
class. - An experimental API for writing your own parsers by subclassing
Parser
.
Parser.Real
is now a property and not a method.- A new design for computing source positions.
posCalculator
now returns aSourcePosDelta
struct representing the amount of text covered by a token, rather than updating the current source position in place.- Performance improvements in the code which computes source positions.
- The
Parse
methods inParseExtensions
now take anIConfiguration
object as an optional parameter (instead of aposCalculator
func).- If you were using
posCalculator
, you can instead subclassDefaultConfiguration
and override thePosCalculator
property.
- If you were using
- Performance improvements across the board thanks to a new
Span
-based implementation. - Performance improvements in
SkipWhitespaces
. - A new CI build system based on GitHub Actions.
- Pidgin's assembly is now strong named.
- Performance improvements to
CurrentPos
. - Internal simplifications to the error handling machinery.
- Pidgin's PDBs are now distributed through nuget.org as a snupkg (not from smbsrc.net).
CurrentOffset
, which returns the number of tokens consumed- A new overload of
Rec
:Func<Parser<TToken, T> Rec(Func<Parser<TToken, T>, Parser<TToken, T>>)
Slice
, a synonym ofMapWithInput
- The
Real
parser now uses the invariant culture. Thank you @SigridAndersen for the contribution!
- Nullability checks
- A bug in
HexNum
. Thank you @comaid for the contribution! - Some
ArrayPool
leaks. - A bug causing
Sequence
to fail when its type argument wasIComparable
but notIEquatable
- Significant performance improvements when parsing from a non-chunked in-memory source such as a string or an array.
SkipWhitespaces
has been rewritten --- it should now run much faster
- Support for netstandard1.3
MapWithInput
, giving access to aSpan
containing the input tokens which were matched by the parser.- An infix version of
Map
(synonym ofSelect
). Real
, a parser for floating point values in the format+1.23e4
- Under-the-hood performance improvements to the way
SourcePos
is handled - A faster implementation of
CIString
- Overloads of
ExpressionParser.Build
to make recursive grammars more convenient
- An
ArrayPool
leak when certain parsers failed
- A
ParserExtensions.Parse
overload which accepts aReadOnlySpan
. - A compile target for
netstandard2.0
. This should simplify installation into .NET Framework projects. - Performance improvements across the board
- Error handling was rewritten.
ParseError
is now a class and not a struct.- Fewer items are reported in
Expected
.
Parser<TToken>.End
is now a property and not a method.Result<TToken, T>
is now a class and not a struct.- When parsing from streaming inputs like
Stream
orTextReader
, the stream will now usually advance beyond the last character consumed by the parser
- Fixed an internal potential memory leak due to the use of pooled memory