pub struct Grammar {
pub imports: Vec<ImportStm>,
pub productions: ProdVec<Production>,
pub terminals: TermVec<Terminal>,
pub nonterminals: NonTermVec<NonTerminal>,
pub nonterm_by_name: BTreeMap<String, SymbolIndex>,
pub term_by_name: BTreeMap<String, SymbolIndex>,
pub empty_index: SymbolIndex,
pub stop_index: SymbolIndex,
pub augmented_index: SymbolIndex,
pub augmented_layout_index: Option<SymbolIndex>,
pub start_index: SymbolIndex,
}
Fields§
§imports: Vec<ImportStm>
§productions: ProdVec<Production>
§terminals: TermVec<Terminal>
§nonterminals: NonTermVec<NonTerminal>
§nonterm_by_name: BTreeMap<String, SymbolIndex>
§term_by_name: BTreeMap<String, SymbolIndex>
§empty_index: SymbolIndex
Index of EMPTY symbol
stop_index: SymbolIndex
Index of STOP symbol
augmented_index: SymbolIndex
Index of grammar augmented symbol
augmented_layout_index: Option<SymbolIndex>
Index of augmented symbol for Layout rule if given
start_index: SymbolIndex
An index of the start symbol. First non-terminal or terminal of the grammar.
Implementations§
Source§impl Grammar
impl Grammar
pub fn symbol_index(&self, name: &str) -> SymbolIndex
pub fn symbol_name(&self, index: SymbolIndex) -> String
Sourcepub fn symbol_has_content(&self, symbol: SymbolIndex) -> bool
pub fn symbol_has_content(&self, symbol: SymbolIndex) -> bool
If this symbol is either a non-terminal of a terminal with a content. I.e. not a constant match terminal (keyword, punctuation…)
pub fn symbol_indexes(&self, names: &[&str]) -> SymbolVec<SymbolIndex>
pub fn symbol_names<T>(&self, indexes: T) -> Vec<String>where
T: IntoIterator<Item = SymbolIndex>,
pub fn term_to_symbol_index(&self, index: TermIndex) -> SymbolIndex
Sourcepub fn symbol_to_term_index(&self, index: SymbolIndex) -> TermIndex
pub fn symbol_to_term_index(&self, index: SymbolIndex) -> TermIndex
Convert symbol index to terminal index.
Sourcepub fn symbol_to_term(&self, index: SymbolIndex) -> &Terminal
pub fn symbol_to_term(&self, index: SymbolIndex) -> &Terminal
Convert symbol index to terminal
Sourcepub fn term_by_name(&self, name: &str) -> &Terminal
pub fn term_by_name(&self, name: &str) -> &Terminal
Get Terminal by name.
Sourcepub fn term_by_index(&self, index: TermIndex) -> &Terminal
pub fn term_by_index(&self, index: TermIndex) -> &Terminal
Get Terminal by index.
pub fn nonterm_to_symbol_index(&self, index: NonTermIndex) -> SymbolIndex
Sourcepub fn symbol_to_nonterm_index(&self, index: SymbolIndex) -> NonTermIndex
pub fn symbol_to_nonterm_index(&self, index: SymbolIndex) -> NonTermIndex
Convert symbol index to non-terminal index. Panics if symbol index is a terminal index.
Sourcepub fn symbol_to_nonterm(&self, index: SymbolIndex) -> &NonTerminal
pub fn symbol_to_nonterm(&self, index: SymbolIndex) -> &NonTerminal
Convert symbol index to non-terminal. Panics if symbol index is a terminal index.
Sourcepub fn nonterm_by_name(&self, name: &str) -> &NonTerminal
pub fn nonterm_by_name(&self, name: &str) -> &NonTerminal
Get NonTerminal by name.
Sourcepub fn nonterm_by_index(&self, index: NonTermIndex) -> &NonTerminal
pub fn nonterm_by_index(&self, index: NonTermIndex) -> &NonTerminal
Get NonTerminal by index.
pub fn is_nonterm(&self, index: SymbolIndex) -> bool
pub fn is_term(&self, index: SymbolIndex) -> bool
pub fn is_empty(&self, index: SymbolIndex) -> bool
pub fn production_len(&self, prod: ProdIndex) -> usize
pub fn production_rhs_symbols(&self, prod: ProdIndex) -> Vec<SymbolIndex>
Sourcepub fn productions(&self) -> Vec<&Production>
pub fn productions(&self) -> Vec<&Production>
Returns all productions except special AUG and AUGL.
Sourcepub fn nonterminals(&self) -> Vec<&NonTerminal>
pub fn nonterminals(&self) -> Vec<&NonTerminal>
Returns all nonterminals except special EMPTY, AUG and AUGL.
pub fn is_enum(&self, nonterminal: &NonTerminal) -> bool
pub fn has_layout(&self) -> bool
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Grammar
impl !RefUnwindSafe for Grammar
impl Send for Grammar
impl !Sync for Grammar
impl Unpin for Grammar
impl UnwindSafe for Grammar
Blanket Implementations§
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> 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