using Jtr.Parsing; namespace Jtr.Tools; public static partial class JsonPath { public class Lexer : Lexer { public static readonly Lexer Default = new(); protected override JsonPathToken EndOfSource => JsonPathToken.EndOfSource; public Lexer() { Rules = [ DefaultRule.NewLine, DefaultRule.Number(JsonPathToken.Number), DefaultRule.Identifier(JsonPathToken.Identifier), DefaultRule.DoubleQuoteString(JsonPathToken.String), ctx => DefaultRule.IgnoreWhitespace(ctx), ctx => Match(ctx, JsonPathToken.False, "false"), ctx => Match(ctx, JsonPathToken.True, "true"), ctx => Match(ctx, JsonPathToken.Null, "null"), ctx => Match(ctx, JsonPathToken.DotDot, ".."), ctx => Match(ctx, JsonPathToken.DollarSign, '$'), ctx => Match(ctx, JsonPathToken.Asterisk, '*'), ctx => Match(ctx, JsonPathToken.Dot, '.'), ctx => Match(ctx, JsonPathToken.Minus, '-'), ctx => Match(ctx, JsonPathToken.Colon, ':'), ctx => Match(ctx, JsonPathToken.LeftBracket, '['), ctx => Match(ctx, JsonPathToken.Comma, ','), ctx => Match(ctx, JsonPathToken.RightBracket, ']'), ]; } } }