Releases: teo-tsirpanis/Farkle
Releases · teo-tsirpanis/Farkle
Version 6.0.0-alpha.3
- Breaking change: .NET Framework 4.5 is no longer supported. The library targets .NET Standard 2.0, .NET Standard 2.1 and .NET 5.
- Breaking change: Logging parser events is no longer supported. The logging function was removed from the signatures of parser APIs.
- Breaking change: The function
LALRParser.parseLALR
was renamed toLALRParser.parse
. - Breaking change: The
Farkle.Parser.OptimizedOperations
type was made internal. - Breaking change: Transformers no longer take the position of a terminal, but an
ITransformerContext
type containing more information. - Breaking change: Farkle's exception types were refactored. They inherit from
FarkleException
. - Breaking change: Post-processor exceptions are wrapped inside a
PostProcessorException
and thrown to user code. - Breaking change: Only objects of type
PrecompilableDesigntimeFarkle
can be marked for precompilation. - Minor breaking change: The
Transformers
andFusers
properties were removed from theFarkle.Builder.GrammarDefinition
type. - Farkle will now optimize precompilable designtime Farkles using dynamic code generation. This feature is only supported on .NET Standard 2.1 if the runtime supports dynamic code compilation.
- An API for the
CharStream
type was published. - An API for getting precompiled grammars was published.
- The tokenizer can be extended by user code. TODO: write documentation
- The runtime Farkle's extension methods became regular methods.
- Exceptions that might occur when a precompiled grammar fails to be loaded can be suppressed with an
AppContext
switch.
Version 6.0.0-alpha.2
- Farkle supports creating regexes from strings. See more in https://teo-tsirpanis.github.io/Farkle/string-regexes.html.
- The parser, the builder and the EGT(neo) reader became faster once again.
- The precompiler does not crash when used from .NET Standard libraries.
- Breaking change: The
CharStream
API became internal. A new one will be published in the next release.
Version 6.0.0-alpha.1
- Breaking change: Removed the legacy API for creating runtime Farkles from EGT files (the API with the transformers and fusers). EGT files are still supported (for now), but users are strongly urged to rewrite their grammars using
Farkle.Builder
, or implement thePostProcessor
interface themselves (not recommended). - Breaking change: The
PostProcessor
type was moved to the rootFarkle
namespace. Some reusable post-processors were moved to the newFarkle.PostProcessors
module. - Farkle can now build grammars at compile-time. See more in https://teo-tsirpanis.github.io/Farkle/the-precompiler.html.
- Added a function to rename designtime Farkles; it might be useful for better diagnostic messages.
Version 5.4.1
- Refactor some designtime Farkle functions (like
many1
) to use less nonterminals. - Add functions and regexes to create terminals for unsigned real numbers.
Version 5.4.0
- You can now add lexical groups in a grammar. They resemble GOLD Parser's feature, but always advance by character and do not not support nesting.
- Add a couple of methods in runtime Farkles to easily check whether building it had succeeded.
- Lexical errors are reported at the point they occur; not at the point of the first character read by the tokenizer.
- Made the untyped builder API easier to access. See the deprecation notice for the new functions to use.
- Minor breaking change: The
CharStream.readChar
value gets the character index by value, not by reference. Callers have to increment it accordingly to get further characters. - Minor breaking change: The type
Farkle.Grammar.OptimizedOperations
was moved to theFarkle.Parser
namespace; it was there for historical reasons. - As you might have seen, breaking changes on public members that do not affect the average Farkle user will not warrant a major version increase.
Version 5.3.0
- Farkle's speed more than doubled by disabling tailcall optimizations.
- Minor breaking change: The API of the
CharStream
type slightly changed. Most notably, the typeCharStreamIndex
was removed in favor ofuint64
, and the order of the last two arguments in the functionCharStream.read
has changed.
Version 5.2.0
- The types
DesigntimeFarkle<TResult>
andPostProcessor<TResult>
are covariant. The change was made possible by Covarsky, a tool written for this purpose. - Added a function called
Regex.allButChars
(Regex.NotOneOf
for C#) that creates regexes accepting all characters except certain ones. - User code exceptions during post-processing are not captured anymore.
- Farkle.Tools.MSBuild works with all .NET Core SDK versions after 2.0.
Version 5.1.0
- It happened. Farkle can create grammars without the need of GOLD Parser. Farkle is now a parsing library on its own.
- Move the
CharStream
type in theFarkle.IO
namespace. - Add methods to parse text from .NET
TextReader
s. They should be preferred over parsing .NETStream
s because the latter are supposed to contain binary data, not text. - The
Farkle.CSharp
namespace is no longer required. C# users just have to useFarkle
to get their extension methods, unless they are writing their own post-processors for GOLD Parser grammars, where they have to useFarkle.PostProcessor.CSharp
. - Breaking change: Farkle.Tools.MSBuild was upgraded to .NET Core 3.1. Nothing significant changed though, which means those who still use .NET Core 2.1 can stay in a previous version.
- Breaking change: Reading grammars from EGT files now raises an exception. Rationale
- Breaking change: Some utility functions that had nothing to do with parsing were either removed or made internal.
- Breaking change: Internal errors of the parser (in the unfortunate case they happen) throw an exception. In the next release, exceptions in a transformer or fuser will not be caught either.
Version 5.0.1
- Fix a bug where comments in input text would sometimes crash the parser.
- Allow line comments in the last line of the input text.
Version 4.0.2
- Fix a bug where comments in input text would sometimes crash the parser.