Struct enso_flexer::group::Group[][src]

pub struct Group {
    pub id: Identifier,
    pub name: String,
    pub parent_index: Option<Identifier>,
    pub rules: Vec<Rule>,
    pub state_names: HashMap<usize, String>,
    pub state_callbacks: HashMap<usize, String>,
}
Expand description

A group is a structure for associating multiple rules with each other, and is the basic building block of the flexer.

A group consists of the following:

  • A set of Rules, each containing a regex pattern and associated callback.
  • Inherited rules from a parent group, if such a group exists.

Internally, the flexer maintains a stack of groups, where only one group can be active at any given time. Rules are matched in order, and hence overlaps are handled by the order in which the rules are matched, with the first callback being triggered.

Whenever a rule.pattern from the active group is matched against part of the input, the associated rule.callback is executed. This callback may exit the current group or even enter a new one. As a result, groups allow us to elegantly model a situation where certain parts of a program (e.g. within a string literal) have very different lexing rules than other portions of a program (e.g. the body of a function).

Fields

id: Identifier
Expand description

A unique identifier for the group.

name: String
Expand description

A name for the group (useful in debugging).

parent_index: Option<Identifier>
Expand description

The parent group from which rules are inherited.

It is ensured that the group is held mutably.

rules: Vec<Rule>
Expand description

A set of flexer rules.

state_names: HashMap<usize, String>
Expand description

The names for the user-defined states.

state_callbacks: HashMap<usize, String>
Expand description

The callback functions for the user-defined states.

Implementations

impl Group[src]

pub fn new(
    id: Identifier,
    name: impl Into<String>,
    parent_index: Option<Identifier>
) -> Self
[src]

Creates a new group.

pub fn add_rule(&mut self, rule: Rule)[src]

Adds a new rule to the current group.

pub fn create_rule(&mut self, pattern: &Pattern, code: &str)[src]

Creates a new rule.

pub fn callback_name(&self, rule_ix: usize) -> String[src]

The canonical name for a given rule.

Trait Implementations

impl Clone for Group[src]

fn clone(&self) -> Group[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for Group[src]

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

Formats the value using the given formatter. Read more

impl Default for Group[src]

fn default() -> Group[src]

Returns the “default value” for a type. Read more

impl Display for Group[src]

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

Formats the value using the given formatter. Read more

impl From<Group> for Registry[src]

fn from(value: Group) -> Self[src]

Performs the conversion.

Auto Trait Implementations

impl RefUnwindSafe for Group

impl Send for Group

impl Sync for Group

impl Unpin for Group

impl UnwindSafe for Group

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T> HasRefValue for T where
    T: ?Sized
[src]

type RefValue = T

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> PhantomConversions for T[src]

fn phantom_into<P>() -> P where
    Self: PhantomInto<P>, 
[src]

fn phantom_from<P>() -> Self where
    P: PhantomInto<Self>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

pub fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more

pub fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).

pub fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.

pub fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.

impl<T> ToImpl for T[src]

fn to<P>(self) -> P where
    Self: Into<P>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

impl<T> ToRef<T> for T where
    T: ?Sized
[src]

pub fn to_ref(&self) -> &T[src]

impl<T> ToString for T where
    T: Display + ?Sized
[src]

pub default fn to_string(&self) -> String[src]

Converts the given value to a String. Read more

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

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

Performs the conversion.

impl<T> TypeDisplay for T[src]

pub default fn type_display() -> String[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

pub fn vzip(self) -> V

impl<T> Writer for T[src]

pub default fn write_by_level(&self, message: &Array)[src]

Write message using the appropriate console method.