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
impl NonTerminal
Sourcepub fn get_op1(&self, op1: &str) -> Option<ProdRule>
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.
Sourcepub fn get_op2(&self, op2: &str) -> Option<ProdRule>
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.
Sourcepub fn get_op3(&self, op3: &str) -> Option<ProdRule>
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
.
Sourcepub fn get_all_formatter(&self) -> Vec<(Op1Enum, usize)>
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.
pub fn map_nt_number(&mut self, f: impl FnMut(usize) -> usize)
Trait Implementations§
Source§impl Clone for NonTerminal
impl Clone for NonTerminal
Source§fn clone(&self) -> NonTerminal
fn clone(&self) -> NonTerminal
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for NonTerminal
impl RefUnwindSafe for NonTerminal
impl Send for NonTerminal
impl Sync for NonTerminal
impl Unpin for NonTerminal
impl UnwindSafe for NonTerminal
Blanket Implementations§
Source§impl<T> AllocForAny<T> for T
impl<T> AllocForAny<T> for T
Source§fn galloc(self) -> &'static T
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
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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