Struct Repetition

pub struct Repetition { pub min: u32, pub max: Option<u32>, pub greedy: bool, pub sub: Box<Hir> }

The high-level intermediate representation of a repetition operator.

A repetition operator permits the repetition of an arbitrary sub-expression.

Fields

min: u32

The minimum range of the repetition.

Note that special cases like ?, + and * all get translated into the ranges {0,1}, {1,} and {0,}, respectively.

When min is zero, this expression can match the empty string regardless of what its sub-expression is.

max: Option<u32>

The maximum range of the repetition.

Note that when max is None, min acts as a lower bound but where there is no upper bound. For something like x{5} where the min and max are equivalent, min will be set to 5 and max will be set to Some(5).

greedy: bool

Whether this repetition operator is greedy or not. A greedy operator will match as much as it can. A non-greedy operator will match as little as it can.

Typically, operators are greedy by default and are only non-greedy when a ? suffix is used, e.g., (expr)* is greedy while (expr)*? is not. However, this can be inverted via the U "ungreedy" flag.

sub: Box<Hir>

The expression being repeated.

Implementations

impl Repetition

fn with(&self, sub: Hir) -> Repetition

Returns a new repetition with the same min, max and greedy values, but with its sub-expression replaced with the one given.

Trait Implementations

impl Clone for Repetition

fn clone(&self) -> Self

impl Debug for Repetition

fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl Eq for Repetition

impl PartialEq for Repetition

fn eq(&self, other: &Self) -> bool

impl StructuralPartialEq for Repetition

Auto Trait Implementations

impl Freeze for Repetition

impl RefUnwindSafe for Repetition

impl Send for Repetition

impl Sync for Repetition

impl Unpin for Repetition

impl UnsafeUnpin for Repetition

impl UnwindSafe for Repetition

Blanket Implementations

impl<T> Any for Repetition where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Repetition where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Repetition where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for Repetition where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for Repetition

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Repetition where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for Repetition where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for Repetition where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for Repetition where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>