Table of Contents

Class QueryExpressionParser

Namespace
JsonApiDotNetCore.Queries.Parsing
Assembly
JsonApiDotNetCore.dll

The base class for parsing query string parameters, using the Recursive Descent algorithm.

[PublicAPI]
public abstract class QueryExpressionParser
Inheritance
QueryExpressionParser
Derived
Inherited Members

Remarks

A tokenizer populates a stack of tokens from the source text, which is then recursively popped by various parsing routines. A QueryParseException is expected to be thrown on invalid input.

Properties

TokenStack

Contains the tokens produced from the source text, after Tokenize(string) has been called.

protected Stack<Token> TokenStack { get; }

Property Value

Stack<Token>

Remarks

The various parsing methods typically pop tokens while producing QueryExpressions.

Methods

AssertTokenStackIsEmpty()

Throws a QueryParseException when TokenStack isn't empty. Derived types should call this when parsing has completed, to ensure all input has been processed.

protected void AssertTokenStackIsEmpty()

EatSingleCharacterToken(TokenKind)

Consumes the expected token kind from the top of TokenStack. Throws a QueryParseException if a different token kind is at the top, or if there are no more tokens available.

protected virtual void EatSingleCharacterToken(TokenKind kind)

Parameters

kind TokenKind

EatText(string)

Consumes a token containing the expected text from the top of TokenStack. Throws a QueryParseException if a different token kind is at the top, it contains a different text, or if there are no more tokens available.

protected void EatText(string text)

Parameters

text string

GetNextTokenPositionOrEnd()

Gets the zero-based position of the token at the top of TokenStack, or the position at the end of the source text if there are no more tokens available.

protected int GetNextTokenPositionOrEnd()

Returns

int

GetRelativePositionOfLastFieldInChain(ResourceFieldChainExpression)

Gets the zero-based position of the last field in the specified resource field chain.

protected int GetRelativePositionOfLastFieldInChain(ResourceFieldChainExpression fieldChain)

Parameters

fieldChain ResourceFieldChainExpression

Returns

int

ParseFieldChain(FieldChainPattern, FieldChainPatternMatchOptions, ResourceType, string?)

Parses a dot-separated path of field names into a chain of resource fields, while matching it against the specified pattern.

protected ResourceFieldChainExpression ParseFieldChain(FieldChainPattern pattern, FieldChainPatternMatchOptions options, ResourceType resourceType, string? alternativeErrorMessage)

Parameters

pattern FieldChainPattern
options FieldChainPatternMatchOptions
resourceType ResourceType
alternativeErrorMessage string

Returns

ResourceFieldChainExpression

Tokenize(string)

Populates TokenStack from the source text using QueryTokenizer.

protected virtual void Tokenize(string source)

Parameters

source string

Remarks

To use a custom tokenizer, override this method and consider overriding EatSingleCharacterToken(TokenKind).

ValidateField(ResourceFieldAttribute, int)

Enables derived types to throw a QueryParseException when usage of a JSON:API field inside a field chain is not permitted.

protected virtual void ValidateField(ResourceFieldAttribute field, int position)

Parameters

field ResourceFieldAttribute
position int