pub struct Parser<'a, T>where
T: ParserToken<'a>,{ /* private fields */ }Expand description
Implements a WDL parser.
The parser produces a list of events that can be used to construct a CST.
Implementations§
Source§impl<'a, T> Parser<'a, T>where
T: ParserToken<'a>,
impl<'a, T> Parser<'a, T>where
T: ParserToken<'a>,
Sourcepub fn peek(&mut self) -> Option<(T, Span)>
pub fn peek(&mut self) -> Option<(T, Span)>
Peeks at the next token (i.e. lookahead 1) from the lexer without consuming it.
The token is not added to the event list.
§Note
Note that peeking may cause parser events to be buffered.
If peek returns None, ensure all buffered events are added to the
event list by calling next on the parser; otherwise, calling finish
may panic.
Sourcepub fn peek2(&mut self) -> Option<Peek2<T>>
pub fn peek2(&mut self) -> Option<Peek2<T>>
Peeks at the next and next-next tokens (i.e. lookahead 2) from the lexer without consuming either token.
The returned tokens are not added to the event list.
Sourcepub fn next_if(&mut self, token: T) -> bool
pub fn next_if(&mut self, token: T) -> bool
Consumes the next token only if it matches the given token.
Returns true if the token was consumed, false if otherwise.
Sourcepub fn matching<F>(
&mut self,
open: T,
close: T,
allow_empty: bool,
cb: F,
) -> Result<(), Diagnostic>
pub fn matching<F>( &mut self, open: T, close: T, allow_empty: bool, cb: F, ) -> Result<(), Diagnostic>
Parses a matching token pair that surrounds an item.
This method parses the open token, calls the callback to parse the item, and then parses the close token.
Sourcepub fn matching_delimited<F>(
&mut self,
open: T,
close: T,
delimiter: Option<T>,
recovery: TokenSet,
cb: F,
) -> Result<(), Diagnostic>
pub fn matching_delimited<F>( &mut self, open: T, close: T, delimiter: Option<T>, recovery: TokenSet, cb: F, ) -> Result<(), Diagnostic>
Parses a matching token pair that surround a delimited list of items.
This method parses the open token, calls the callback for each delimited item, and then parses the close token.
The provided recovery token set is used to recover within the delimited item list.
Sourcepub fn consume_close_token(&mut self, open: T, open_span: Span, close: T)
pub fn consume_close_token(&mut self, open: T, open_span: Span, close: T)
Consumes a close token if it is the next token to be parsed.
Otherwise, emits an “unmatched” diagnostic and synthesizes the close token into the parser’s list of events.
Sourcepub fn delimited<F>(
&mut self,
until: T,
delimiter: Option<T>,
recovery: TokenSet,
cb: F,
)
pub fn delimited<F>( &mut self, until: T, delimiter: Option<T>, recovery: TokenSet, cb: F, )
Parses a delimited list of items until the given token.
The provided recovery token set is used to recover within the delimited item list.
The until token is not consumed.
Sourcepub fn diagnostic(&mut self, diagnostic: Diagnostic)
pub fn diagnostic(&mut self, diagnostic: Diagnostic)
Adds a diagnostic to the parser output.
Sourcepub fn push_recovery_set(&mut self, tokens: TokenSet)
pub fn push_recovery_set(&mut self, tokens: TokenSet)
Pushes a token set to the parser’s recovery token set stack.
Sourcepub fn pop_recovery_set(&mut self)
pub fn pop_recovery_set(&mut self)
Pops a token set from the parser’s recovery token set stack.
§Panics
Panics if the parser’s recovery set is empty.
Sourcepub fn recover(&mut self, diagnostic: Diagnostic)
pub fn recover(&mut self, diagnostic: Diagnostic)
Recovers from an error by consuming all tokens not in the top-most recovery set.
§Panics
Panics if a recovery set was not pushed with Self::push_recovery_set.
Sourcepub fn recover_with_set(&mut self, diagnostic: Diagnostic, recovery: TokenSet)
pub fn recover_with_set(&mut self, diagnostic: Diagnostic, recovery: TokenSet)
Performs recovery with the given recovery token set.
Sourcepub fn require(&mut self, token: T) -> Span
pub fn require(&mut self, token: T) -> Span
Requires that the current token is the given token.
Panics if the token is not the given token.
Sourcepub fn require_in(&mut self, tokens: TokenSet)
pub fn require_in(&mut self, tokens: TokenSet)
Requires that the current token is in the given token set.
§Panics
Panics if the token is not in the token set.
Sourcepub fn expect(&mut self, token: T) -> Result<Span, Diagnostic>
pub fn expect(&mut self, token: T) -> Result<Span, Diagnostic>
Expects the next token to be the given token.
Returns an error if the token is not the given token.
Sourcepub fn expect_with_name(
&mut self,
token: T,
name: &'static str,
) -> Result<Span, Diagnostic>
pub fn expect_with_name( &mut self, token: T, name: &'static str, ) -> Result<Span, Diagnostic>
Expects the next token to be the given token, but uses the provided name in the error.
Returns an error if the token is not the given token.
Sourcepub fn expect_in(
&mut self,
tokens: TokenSet,
expected: &[&str],
) -> Result<(T, Span), Diagnostic>
pub fn expect_in( &mut self, tokens: TokenSet, expected: &[&str], ) -> Result<(T, Span), Diagnostic>
Expects the next token to be in the given token set.
Returns an error if the token is not the given set.
Sourcepub fn interpolate<T2, F, R>(&mut self, cb: F) -> R
pub fn interpolate<T2, F, R>(&mut self, cb: F) -> R
Used to interpolate strings with a different string interpolation token.
The provided callback receives a Interpolator.
The callback should use Interpolator::into_parser for the return value.
Sourcepub fn morph<T2>(self) -> Parser<'a, T2> ⓘ
pub fn morph<T2>(self) -> Parser<'a, T2> ⓘ
Morph this parser into a parser for a new token type.
The returned parser continues to point at the same span as the current parser.
Sourcepub fn into_interpolator<T2>(self) -> Interpolator<'a, T2> ⓘ
pub fn into_interpolator<T2>(self) -> Interpolator<'a, T2> ⓘ
Consumes the parser and returns an interpolator.
Sourcepub fn finish(self) -> Output<'a, T>
pub fn finish(self) -> Output<'a, T>
Consumes the parser and returns the output.
§Panics
This method panics if buffered events remain in the parser.
To ensure that no buffered events remain, call next() on the parser
and verify it returns None before calling this method.
Sourcepub fn update_last_token_kind(&mut self, new_kind: SyntaxKind)
pub fn update_last_token_kind(&mut self, new_kind: SyntaxKind)
Sourcepub fn consume_remainder(&mut self)
pub fn consume_remainder(&mut self)
Consumes the remainder of the unparsed source into a special “unparsed” token.
This occurs when a source file is missing a version statement or if the version specified is unsupported.
Trait Implementations§
Source§impl<'a, T> Iterator for Parser<'a, T>where
T: ParserToken<'a>,
impl<'a, T> Iterator for Parser<'a, T>where
T: ParserToken<'a>,
Source§fn next(&mut self) -> Option<(T, Span)>
fn next(&mut self) -> Option<(T, Span)>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk)N values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by)n elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
nth element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse)separator between items
of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse)separator
between items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows)f for each contiguous window of size N over
self and returns an iterator over the outputs of f. Like slice::windows(),
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator. Read moreSource§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned)true precede all those that return false. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks)N elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd elements of
this Iterator with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by)Iterator with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator are lexicographically
greater than or equal to those of another. Read more