Struct NonTerminal

Source
pub struct NonTerminal {
    pub name: String,
    pub ty: Type,
    pub rules: Vec<ProdRule>,
    pub config: Config,
}
Expand description

A struct representing a grammar non-terminal.

This construct includes several fields essential for defining a non-terminal within a string synthesis problem. The name field holds the identifier for the non-terminal, while ty specifies the associated type. The rules field is a collection of production rules that describe how this non-terminal can be expanded. The start field is a boolean flag indicating whether this non-terminal serves as the starting point in the grammar. Lastly, config encompasses additional settings or parameters that may influence the synthesis process for this non-terminal.

Fields§

§name: String§ty: Type§rules: Vec<ProdRule>§config: Config

Implementations§

Source§

impl NonTerminal

Source

pub fn get_op1(&self, op1: &str) -> Option<ProdRule>

Retrieves a unary operation production rule by name.

This function iterates through the list of production rules associated with a non-terminal to find a unary operation rule (Op1) matching the specified operation name. If a matching Op1 operation is found, it returns the corresponding production rule; otherwise, it returns None. This functionality enables specific lookups for unary operations within a non-terminal’s rule set.

Source

pub fn get_op2(&self, op2: &str) -> Option<ProdRule>

Retrieves an Op2 production rule matching a given operation name.

This method iterates over the set of production rules associated with a non-terminal. For each rule, if the rule is an Op2 operation and its name matches the specified op2 string, the method returns a cloned instance of that rule. If no matching rule is found, it returns None. This allows for extracting specific binary operations from the rule set, aiding in identifying or constructing expressions based on these operations.

Source

pub fn get_op3(&self, op3: &str) -> Option<ProdRule>

Retrieves a ProdRule of type Op3 from the NonTerminal if it matches a specific operation name.

This method iterates over the rules vector within a NonTerminal instance and checks if each rule is an Op3 operation. If an Op3 operation matches the given op3 string name, it returns a clone of that ProdRule. If no matching operation is found, the method returns None.

Source

pub fn get_all_formatter(&self) -> Vec<(Op1Enum, usize)>

Retrieves a vector of all one-operand operations that are formatting operations from the production rules associated with the non-terminal.

This method iterates through the list of production rules, checking each rule to see if it is a unary operation (Op1). If the operation is identified as a formatting operation via is_formatting_op, it adds it to the results along with its associated non-terminal index. The method compiles these into a vector of tuples containing the operation enum and the index, which is then returned.

Source

pub fn map_nt_number(&mut self, f: impl FnMut(usize) -> usize)

Trait Implementations§

Source§

impl Clone for NonTerminal

Source§

fn clone(&self) -> NonTerminal

Returns a copy 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 NonTerminal

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> AllocForAny<T> for T

Source§

fn galloc(self) -> &'static T

Provides a method to allocate an instance of T on the heap with a static lifetime.

This implementation of galloc takes ownership of the T instance and uses the alloc function to place it in a location with a static lifetime, presumably managing it in a way that ensures its persistence for the duration of the program. This can be particularly useful for scenarios where a static lifetime is required, such as when interfacing with systems or patterns that necessitate global state or long-lived data.

Source§

fn galloc_mut(self) -> &'static T

Provides a method that moves the instance and returns a reference to it allocated with a static lifetime.

This method utilizes alloc_mut to perform the allocation, likely involving allocating the resource in a manner that ensures it lives for the entire duration of the application. These semantics allow the user to safely assume that the reference will not expire during the program’s execution, making it suitable for long-lived data structures or operations that require such guarantees.

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, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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 = 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.
Source§

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

Source§

fn vzip(self) -> V