Funcky.Lexer
0.9.0
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package Funcky.Lexer --version 0.9.0
NuGet\Install-Package Funcky.Lexer -Version 0.9.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Funcky.Lexer" Version="0.9.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Funcky.Lexer --version 0.9.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Funcky.Lexer, 0.9.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Funcky.Lexer as a Cake Addin #addin nuget:?package=Funcky.Lexer&version=0.9.0 // Install Funcky.Lexer as a Cake Tool #tool nuget:?package=Funcky.Lexer&version=0.9.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Funcky.Lexer
Can you write a lexer in a single expression? Now you can.
Packages
Example
Define your tokens by marking them with the IToken
interface.
public record PlusToken : IToken;
public record MinusToken : IToken;
public record MultiplicationToken : IToken;
public record DivisionToken : IToken;
You have to define an EpsilonToken marked with the IEpsilonToken
interface. This will be returned by the LexerReader when you read past the end.
public record EpsilonToken : IEpsilonToken;
Create the rules how you want to lex the tokens.
LexerResult result = LexerRuleBook.Builder
.AddRule(char.IsDigit, ScanNumber)
.AddSimpleRule<PlusToken>("+")
.AddSimpleRule<MinusToken>("-")
.AddSimpleRule<MultiplicationToken>("*")
.AddSimpleRule<DivisionToken>("/")
.WithEpsilonToken<EpsilonToken>()
.Build()
.Scan("40+20*6");
Use the lexeme-builder to build any token you want.
private static Lexeme ScanNumber(ILexemeBuilder builder)
=> builder.Peek().Match(none: false, some: char.IsDigit)
? ScanNumber(builder.Retain())
: builder.Build(new NumberToken(int.Parse(builder.CurrentToken)));
Create a rulebook
You always start with an empty LexerRuleBook.Builder
Build a lexeme
Line position calculation
Lexemes dependent on context
Non-default implementations
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. 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 was computed. 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. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net7.0
- Funcky (>= 3.3.0 && < 4.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.