PhoenixmlDb.XQuery

XQueryLexerAdapter

An adapter that wraps to manage lexer mode transitions for XQuery direct element constructors.

#XQueryLexerAdapter

Namespace: PhoenixmlDb.XQuery.Parser

An adapter that wraps to manage lexer mode transitions for XQuery direct element constructors.

ANTLR4 lexer rules each support a single mode action (pushMode, popMode, or mode). XQuery direct element constructors require multi-step mode transitions that cannot be expressed in a single lexer action. This adapter intercepts tokens from the lexer and performs the additional mode stack manipulations needed for correct parsing: LESS_THAN followed by a name-start character pushes START_TAG mode. RBRACE while inside element content pops back from DEFAULT_MODE to ELEM_CONTENT. END_TAG_CLOSE pops both END_TAG (done by the lexer) and ELEM_CONTENT (done here).

#Methods

#IsNameStartChar(Int32)

Returns true if the character code point is an XML NameStartChar.

#IsNumericLiteral(Int32)

Returns true if the token type is a numeric literal (integer, decimal, or double).

#IsOperatorPosition(Int32)

Returns true if the last token type indicates we are in an "operator position" where < must be a comparison operator, not a direct element constructor. After these tokens, < cannot start an element constructor per XQuery grammar.

#StartsWithNameStartChar(Antlr4.Runtime.IToken)

Returns true if the token's text begins with an XML NameStartChar — i.e. the token is an NCName or a keyword (such as mod/div/idiv/eq) that the lexer spells with letters. Such a token immediately abutting a numeric literal is the XPST0003 violation we want to reject.

#Fields

Name Description
_attrValueDepth Tracks attribute value enclosed expression depth so we know when RBRACE should pop back to ATTR_VALUE_DQ or ATTR_VALUE_SQ mode.
_deferredToken When a LESS_THAN_SLASH token is split into LESS_THAN + SLASH, this holds the deferred SLASH token to be returned on the next call.
_elemDepth Tracks element nesting depth so we know when RBRACE should pop back to ELEM_CONTENT vs. being a normal brace in default mode.
_enclosedBraceDepth Tracks nested brace depth within enclosed expressions so that inner {} (maps, computed constructors) don't prematurely pop out of element content.
_lastTokenType The type of the last non-whitespace token — used to disambiguate < between comparison operator and direct element constructor start.
_previousToken The most recently emitted token. Used to detect a numeric literal immediately followed — with no intervening whitespace or comment — by a name (NCName or an operator keyword such as mod/div/idiv), which the XPath/XQuery grammar forbids (XPST0003). ANTLR discards whitespace, so 10mod 3 would otherwise lex identically to 10 mod 3; this token-adjacency check restores the spec-required separation.
_stringConstructorDepth Tracks string constructor interpolation depth so we know when RBRACE should pop back to STRING_CONSTRUCTOR mode vs. being a normal brace in default mode.