Module

parsing.compiled_dispatch

Compile-time dispatch for pattern-based parsing.

Generates optimized dispatch code at module load time based on CommonMark token patterns. Uses Python 3.10+ match/case for efficient pattern matching.

Architecture:

  1. At import time: Build pattern → parser lookup table
  2. At parse time: O(1) lookup based on token type signature
  3. Fallback: Standard parser for unknown patterns

Performance:

  • O(1) parser selection (dict lookup)
  • No runtime pattern analysis
  • Specialized parsers eliminate branching

Future: Could generate Cython code for even faster dispatch.

Classes

PatternDispatcher 4 ▼
Compile-time pattern → parser dispatcher. Built once at module load, used for all parses. Uses fro…

Compile-time pattern → parser dispatcher.

Built once at module load, used for all parses. Uses frozenset of token types as pattern signature.

Methods

register 2 ▼
Register a parser for a token pattern.
def register(self, pattern: frozenset[TokenType], parser: ParserFn) -> None
Parameters
Name Type Description
pattern —
parser —
get_parser 1 ParserFn | None ▼
Get parser for token pattern, or None for fallback. O(1) lookup after O(n) sig…
def get_parser(self, tokens: list[Token]) -> ParserFn | None

Get parser for token pattern, or None for fallback.

O(1) lookup after O(n) signature computation. Signature computation is very cheap (just type checks).

Parameters
Name Type Description
tokens —
Returns
ParserFn | None
get_stats 0 dict ▼
Get dispatch statistics.
def get_stats(self) -> dict
Returns
dict
Internal Methods 1 ▼
__init__ 0 ▼
def __init__(self) -> None

Functions

build_dispatcher 0 PatternDispatcher ▼
Build the pattern dispatcher at module load time. Registers ONLY patterns wher…
def build_dispatcher() -> PatternDispatcher

Build the pattern dispatcher at module load time.

Registers ONLY patterns where token types alone determine parsing.

NOT registered (require content analysis):

  • PARAGRAPH_LINE patterns: Can contain setext underlines (===, ---), tables
  • LIST patterns: Can contain indented code, complex nesting
  • FENCED_CODE: FencedCode node uses source_start/source_end tracking

These are handled by the ultra-fast path (can_use_ultra_fast) or the main parser's existing fast paths.

get_dispatcher 0 PatternDispatcher ▼
Get the global pattern dispatcher (lazy initialization).
def get_dispatcher() -> PatternDispatcher
dispatch_parse 3 tuple ▼
Dispatch to optimal parser based on token pattern.
def dispatch_parse(tokens: list[Token], parse_inline_fn: Callable, fallback_fn: Callable) -> tuple
Parameters
Name Type Description
tokens list[Token]

Token list from lexer

parse_inline_fn Callable

Function to parse inline content

fallback_fn Callable

Standard parser for unknown patterns

Returns
tuple