pub struct Matcher {
pub rx: Regex,
/* private fields */
}
Expand description
This is functionally equivalent to a Regex
: you can use it repeatedly to
search a string. It cannot itself be used directly to split strings, but
its regular expression is public and may be so used. It improves on regular
expressions in that the Match
object it returns is the root node in a
parse tree, so its matches preserve parse structure.
Fields§
§rx: Regex
The Regex
used for parsing.
Implementations§
Source§impl Matcher
impl Matcher
Sourcepub fn parse<'t>(&self, s: &'t str) -> Option<Match<'t>>
pub fn parse<'t>(&self, s: &'t str) -> Option<Match<'t>>
Returns Some(Match)
if the grammar can parse the string. Note that
unless the grammar is string-bounded, this only means it can parse
the string at some point.
§Examples
let m = grammar!{
(?bB)
S -> r(r"\A") <subject> <VP> r(r"\.\z")
subject => [["Amy", "Bob", "Carter", "Dianne"]]
VP -> <verb_intransitive> | <verb_transitive> <object>
verb_intransitive => [["naps", "doodles", "exercises", "meditates"]]
verb_transitive => [["eats", "programs", "sees", "throws"]]
object => (?w) [["a sandwich", "eggs", "the sunset"]]
}.matcher()?;
let parse_tree = m.parse("Amy programs the sunset.").unwrap();
println!("{}", parse_tree);
// S (0, 24): "Amy programs the sunset."
// subject (0, 3): "Amy"
// VP (4, 23): "programs the sunset"
// verb_transitive (4, 12): "programs"
// object (13, 23): "the sunset"
Sourcepub fn is_match(&self, text: &str) -> bool
pub fn is_match(&self, text: &str) -> bool
Returns whether the grammar can parse the string. This is a cheaper operation than parsing.
§Examples
let m = grammar!{
(?bB)
S -> r(r"\A") <subject> <VP> r(r"\.\z")
subject => [["Amy", "Bob", "Carter", "Dianne"]]
VP -> <verb_intransitive> | <verb_transitive> <object>
verb_intransitive => [["naps", "doodles", "exercises", "meditates"]]
verb_transitive => [["eats", "programs", "sees", "throws"]]
object => (?w) [["a sandwich", "eggs", "the sunset"]]
}.matcher()?;
assert!(m.is_match("Bob doodles."));
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Matcher
impl<'de> Deserialize<'de> for Matcher
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Matcher
impl RefUnwindSafe for Matcher
impl Send for Matcher
impl Sync for Matcher
impl Unpin for Matcher
impl UnwindSafe for Matcher
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