Skip to main content

Rule

Struct Rule 

pub struct Rule {
    pub origin: String,
    pub origin_id: NontermId,
    pub expansion: Vec<Symbol>,
    pub alias: Option<String>,
    pub order: i64,
    pub expand1: bool,
    pub priority: Option<i32>,
    pub keep_all_tokens: bool,
    pub empty_indices: Vec<bool>,
    pub display_id: DisplayId,
    pub shape: RuleShape,
}
Expand description

A grammar rule. Lark’s RuleOptions fields are flattened onto the rule (keep flattened): a rule with multiple BNF expansions would otherwise SHARE one options object, which is exactly the aliasing that makes Lark’s priority='invert' negate a multi-expansion rule once per expansion (a net no-op — see the tp_prio_plus_invert note in the conformance corpus). Owning the fields by value makes that class of bug unrepresentable.

Flat storage, not a flat parameter list: in-crate construction goes through Rule::build from a RuleDraft rather than threading the fields one by one.

The raw keep_all_tokens is retained: AmbiguousExpander needs it and it is not reconstructible from RuleShape::to_include.

Fields§

§origin: String§origin_id: NontermId

The origin nonterminal’s id — a goto_actions COLUMN index (the LHS nonterminal a reduce gotos on), NOT a rule index. The rules[] index space is RuleId.

§expansion: Vec<Symbol>§alias: Option<String>§order: i64§expand1: bool§priority: Option<i32>

Rule priority (rule.3:); None when undeclared. Earley ambiguity resolution consumes it.

§keep_all_tokens: bool§empty_indices: Vec<bool>

Lark’s maybe_placeholders encoding: true at logical position i = “insert a placeholder here at reduce time”.

§display_id: DisplayId

Index into ParseTable::display_names (origin, or alias when present).

§shape: RuleShape

Precomputed reduce-time shaping (built by build_rule_shape).

Trait Implementations§

§

impl Clone for Rule

§

fn clone(&self) -> Rule

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
§

impl Debug for Rule

§

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

Formats the value using the given formatter. Read more
§

impl Eq for Rule

§

impl PartialEq for Rule

§

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

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
§

impl StructuralPartialEq for Rule

Auto Trait Implementations§

§

impl Freeze for Rule

§

impl RefUnwindSafe for Rule

§

impl Send for Rule

§

impl Sync for Rule

§

impl Unpin for Rule

§

impl UnsafeUnpin for Rule

§

impl UnwindSafe for Rule

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<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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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.