jtr/DevDisciples.Json.Parser/JsonLexer.cs
2024-09-15 17:23:27 +02:00

32 lines
1.1 KiB
C#

using DevDisciples.Parsing;
namespace DevDisciples.Json.Parser;
public class JsonLexer : Lexer<JsonToken>
{
public static readonly JsonLexer Default = new();
protected override JsonToken EndOfSource => JsonToken.EndOfSource;
public JsonLexer()
{
Rules =
[
DefaultRule.NewLine,
DefaultRule.Number(JsonToken.Number),
DefaultRule.DoubleQuoteString(JsonToken.String),
ctx => DefaultRule.IgnoreWhitespace(ctx),
ctx => Match(ctx, JsonToken.Minus, '-'),
ctx => Match(ctx, JsonToken.LeftBrace, '{'),
ctx => Match(ctx, JsonToken.Colon, ':'),
ctx => Match(ctx, JsonToken.RightBrace, '}'),
ctx => Match(ctx, JsonToken.LeftBracket, '['),
ctx => Match(ctx, JsonToken.Comma, ','),
ctx => Match(ctx, JsonToken.RightBracket, ']'),
ctx => Match(ctx, JsonToken.True, "true"),
ctx => Match(ctx, JsonToken.False, "false"),
ctx => Match(ctx, JsonToken.Null, "null"),
];
}
}