pub enum Rule {
Analytic(String, Vec<SpannableNode<Ident>>, Vec<SpannableNode<Rhs>>),
Generate(String, Vec<SpannableNode<Ident>>, Vec<SpannableNode<Rhs>>),
Import(String, ImportType, String),
Exclude(String, Vec<SpannableNode<String>>),
}Expand description
A single rule in the WAG grammar.
§Grammar
Rule -> Ident RuleType;
RuleType -> RealRule | ImportRule;
RealRule -> NTArgs? RuleArrow Rhs;
RuleArrow ->
"->" | "=>";
ImportRule -> ImportArrow Identifier;
ImportArrow -> "<-" | "<=" | "<<" | "</";
NTArgs -> “<” AttrIdentifierList “>”; AttrIdentifierList -> Ident “,” AttrIdentifierList | Ident;
Variants§
Analytic(String, Vec<SpannableNode<Ident>>, Vec<SpannableNode<Rhs>>)
An analytic rule (->).
Generate(String, Vec<SpannableNode<Ident>>, Vec<SpannableNode<Rhs>>)
A generative rule (=>).
Import(String, ImportType, String)
An import rule (<-/=/<).
Exclude(String, Vec<SpannableNode<String>>)
An import exclude rule (</).
Implementations§
Source§impl Rule
impl Rule
Sourcepub fn new_unspanned_analytic(
arg_0: String,
arg_1: Vec<Ident>,
arg_2: Vec<Rhs>,
) -> Self
pub fn new_unspanned_analytic( arg_0: String, arg_1: Vec<Ident>, arg_2: Vec<Rhs>, ) -> Self
Construct a Self::Analytic with dummy span information.
Sourcepub fn new_unspanned_generate(
arg_0: String,
arg_1: Vec<Ident>,
arg_2: Vec<Rhs>,
) -> Self
pub fn new_unspanned_generate( arg_0: String, arg_1: Vec<Ident>, arg_2: Vec<Rhs>, ) -> Self
Construct a Self::Generate with dummy span information.
Sourcepub fn new_unspanned_import(
arg_0: String,
arg_1: ImportType,
arg_2: String,
) -> Self
pub fn new_unspanned_import( arg_0: String, arg_1: ImportType, arg_2: String, ) -> Self
Construct a Self::Import with dummy span information.
Sourcepub fn new_unspanned_exclude(arg_0: String, arg_1: Vec<String>) -> Self
pub fn new_unspanned_exclude(arg_0: String, arg_1: Vec<String>) -> Self
Construct a Self::Exclude with dummy span information.
Trait Implementations§
Source§impl Parse for Rule
impl Parse for Rule
Source§fn parse(lexer: &mut LexerBridge<'_>) -> ParseResult<Self>
fn parse(lexer: &mut LexerBridge<'_>) -> ParseResult<Self>
Given a lexer, try to parse a valid instance of this node. Read more
Source§fn parse_sep(
lexer: &mut LexerBridge<'_>,
join: Tokens,
) -> ParseResult<Vec<Self>>where
Self: Sized,
fn parse_sep(
lexer: &mut LexerBridge<'_>,
join: Tokens,
) -> ParseResult<Vec<Self>>where
Self: Sized,
Source§fn parse_sep_end(
lexer: &mut LexerBridge<'_>,
join: Tokens,
end: Tokens,
) -> ParseResult<Vec<Self>>where
Self: Sized,
fn parse_sep_end(
lexer: &mut LexerBridge<'_>,
join: Tokens,
end: Tokens,
) -> ParseResult<Vec<Self>>where
Self: Sized,
impl Eq for Rule
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 UnwindSafe for Rule
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
Mutably borrows from an owned value. Read more
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.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>
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 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>
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 moreSource§impl<T> WrapSpannable<T, SpannableNode<T>> for Twhere
T: Parse,
impl<T> WrapSpannable<T, SpannableNode<T>> for Twhere
T: Parse,
Source§fn wrap_spannable(self) -> SpannableNode<T>
fn wrap_spannable(self) -> SpannableNode<T>
Wrap dummy span information around the node.
Source§fn into_spanned(self, span: Range<usize>) -> SpannableNode<T>
fn into_spanned(self, span: Range<usize>) -> SpannableNode<T>
Convert the node into a
SpannableNode with the specified Span.