GrNode

Enum GrNode 

Source
pub enum GrNode {
    Symbol(Symbol),
    Concat,
    Or,
    Maybe,
    Plus,
    Star,
    LForm(VarId),
    RAssoc,
    PrecEq,
    Instance,
}

Variants§

§

Symbol(Symbol)

§

Concat

§

Or

§

Maybe

§

Plus

§

Star

§

LForm(VarId)

L-form attribute of an alternative or a + / * repetition expression.

  • + and * expressions are either folded or iterative (also called “low latency”, since the listener is called back immediately after parsing each item, whereas the folded form is only called once all the items have been parsed and gathered).
    • The default form is folded. With that form, the items of the repetitions are automatically gathered and handed to the listener callback as an array (if the items have a value) once all items have been parsed. For example, A -> a (b)* c gives a context with the values of a, b, c as variant enum CtxA { A { a: String, b: Vec<String>, c: String } }.
    • If the L-form is specified, the listener callback is called at each iteration, with a context giving the parsed items of that iteration which have a value. The NT used in that loop is defined with the L-form (LForm(VarId)), and its value serves as accumulator to fold all the successive items into a single value presented in the context of the alternative that includes the + or * repetition. For example, A -> a (<L=AIter> b)* c uses AIter, and each time a b value is parsed, the listener callback receives a context variant enum CtxAIter { AIter1 { iter: SynAIter, b: String } }. The callback must return the new SynAIter value. Once all the iterations are parsed, c is parsed, and the listener callback receives the context for A: CtxA { A { a: String, star: SynAIter, c: String } }.
  • Right-recursive rules are either stacked or “low-latency”.
    • The default form is stacked. A rule A -> id A | stop parsing “id1 id2 id3 stop1” yields a sequence

      • A -> id1 A(1), A(1) -> id2 A(2), A(2) -> id3 A(3), A(3) -> stop1

      Since it’s recursive, the listener callback is first called for A(3), then A(2), A(1), and finally A. The parser puts the intermediate values of id on the stack, and once stop1 is reached, it calls the callback with it, then unstacks all the id values for the successive callbacks with id = id3, id2, and finally id1, together with the loop value A, which is updated each time by the callback.

    • The low-latency form, whose VarId points to its own NT, calls the listener callback at each iteration and doesn’t accumulate values on the stack. In the example above, it’s first called with id = id1, id2, id3, and finally stop = stop1, together with the loop value A, which is updated each time by the callback.

§

RAssoc

§

PrecEq

§

Instance

Implementations§

Source§

impl GrNode

Source

pub fn to_str(&self, symbol_table: Option<&SymbolTable>) -> String

Source

pub fn gen_source_code(&self) -> String

Source

pub fn is_modifier(&self) -> bool

Source

pub fn is_empty(&self) -> bool

Trait Implementations§

Source§

impl Clone for GrNode

Source§

fn clone(&self) -> GrNode

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GrNode

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Display for GrNode

Source§

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

Formats the value using the given formatter. Read more
Source§

impl PartialEq for GrNode

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for GrNode

Source§

impl StructuralPartialEq for GrNode

Auto Trait Implementations§

§

impl Freeze for GrNode

§

impl RefUnwindSafe for GrNode

§

impl Send for GrNode

§

impl Sync for GrNode

§

impl Unpin for GrNode

§

impl UnwindSafe for GrNode

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<S> BuildFrom<S> for S

Source§

fn build_from(source: S) -> S

Converts to this type from the input type.
Source§

impl<S, T> BuildInto<T> for S
where T: BuildFrom<S>,

Source§

fn build_into(self) -> T

Calls T::from(self) to convert a [S] into a [T].

Source§

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

Source§

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

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<S, T> TryBuildInto<T> for S
where T: TryBuildFrom<S>,

Source§

type Error = <T as TryBuildFrom<S>>::Error

The type returned in the event of a conversion error.
Source§

fn try_build_into(self) -> Result<T, <T as TryBuildFrom<S>>::Error>

Performs the conversion.
Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.