pub struct CompiledGrammar { /* private fields */ }Expand description
A grammar compiled against a tokenizer — the result of
preprocessing performed by super::GrammarCompiler.
Cheap to clone: the inner state is shared via Arc, matching the
C++ pimpl shared_ptr semantics.
Implementations§
Source§impl CompiledGrammar
impl CompiledGrammar
Sourcepub fn from_impl(pimpl: Arc<CompiledGrammarImpl>) -> Self
pub fn from_impl(pimpl: Arc<CompiledGrammarImpl>) -> Self
Wrap an already-built CompiledGrammarImpl.
Sourcepub fn grammar(&self) -> &GrammarData
pub fn grammar(&self) -> &GrammarData
The associated optimized grammar.
Sourcepub fn grammar_arc(&self) -> Arc<GrammarData>
pub fn grammar_arc(&self) -> Arc<GrammarData>
Shared-pointer access to the optimized grammar — used to seed a
lazily-constructed MaskGenerator.
Sourcepub fn tokenizer_info(&self) -> &TokenizerInfo
pub fn tokenizer_info(&self) -> &TokenizerInfo
The associated tokenizer info.
Sourcepub fn decomposition(&self) -> &GrammarDecomposition
pub fn decomposition(&self) -> &GrammarDecomposition
The WGRAMMAR static/dynamic decomposition (Tier 3c) — the compile-time split of every rule body into fixed scaffolding spans (with precomputed literal bytes) and dynamic value-slot spans.
Computed once during compilation. A scheduler / matcher can
consult it — before the first decode step — to learn the
grammar’s static/dynamic structure without any per-token work.
Each Segment::Static span is exactly
a forced-byte run Tier 3b would otherwise rediscover lazily; the
genuine WGRAMMAR delta is doing this at compile time.
Sourcepub fn get_or_compute_mask(
&self,
canonical: ParserState,
is_root: bool,
) -> Arc<AdaptiveTokenMask>
pub fn get_or_compute_mask( &self, canonical: ParserState, is_root: bool, ) -> Arc<AdaptiveTokenMask>
Get the adaptive token mask for a canonical parser state, computing and caching it on first access (the XGrammar-2 JIT lazy path).
canonical MUST be the canonical cache key — rule_start_pos = -1, sub_element_id/repeat_count/partial_codepoint = 0,
sequence_id = body_expr_id — exactly the tuple the eager port
used. is_root is whether canonical.rule_id is the grammar
root (the root rule has no uncertain tokens).
The returned Arc is byte-identical to what the old eager
compile produced: same MaskGenerator, same canonical key.
Sourcepub fn memory_size_bytes(&self) -> usize
pub fn memory_size_bytes(&self) -> usize
Approximate memory usage in bytes. Port of
CompiledGrammar::MemorySizeBytes.
Sourcepub fn compile_top_k_masks(&self, k: usize) -> usize
pub fn compile_top_k_masks(&self, k: usize) -> usize
OVERLAPPED MASK GENERATION (Tier 2, “configurable JIT”).
Eagerly compute the k most-expensive adaptive-token masks,
populating the lazy JIT cache before the matcher needs them. Uses
at most the compiler’s max_threads, including the caller, and
joins all workers before returning. Metrale Engine calls this synchronously
before prompt prefill; no GPU overlap is implied.
COST RANKING. A state’s mask cost is dominated by the breadth of
its first-character scan: every distinct first byte the state can
accept seeds an EarleyParser walk over the matching slice of
the sorted vocabulary. We therefore rank reachable scanable
states by their char-range edge count (a cheap, monotonic proxy
for that breadth) and warm the top k.
Returns the number of masks actually computed (<= k, and <=
the number of reachable scanable states). k == 0, or an empty
vocabulary, computes nothing. Idempotent: a state already in the
cache is recomputed cheaply via get_or_compute_mask’s fast path
and still counts toward the return value.
Sourcepub fn inner(&self) -> &Arc<CompiledGrammarImpl>
pub fn inner(&self) -> &Arc<CompiledGrammarImpl>
Shared-pointer access to the inner state — used by the matcher.
Trait Implementations§
Source§impl Clone for CompiledGrammar
impl Clone for CompiledGrammar
Source§fn clone(&self) -> CompiledGrammar
fn clone(&self) -> CompiledGrammar
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for CompiledGrammar
impl RefUnwindSafe for CompiledGrammar
impl Send for CompiledGrammar
impl Sync for CompiledGrammar
impl Unpin for CompiledGrammar
impl UnwindSafe for CompiledGrammar
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.