NFA parser for mbe matcher

This commit is contained in:
Edwin Cheng 2021-02-02 04:42:37 +08:00
parent 7f57a01b3d
commit cff2201c30
9 changed files with 592 additions and 175 deletions

View file

@ -13,13 +13,17 @@ use crate::{
impl Bindings {
fn contains(&self, name: &str) -> bool {
self.inner.contains_key(name)
self.inner.iter().any(|(n, _)| n == name)
}
fn get(&self, name: &str, nesting: &mut [NestingState]) -> Result<&Fragment, ExpandError> {
let mut b = self.inner.get(name).ok_or_else(|| {
ExpandError::BindingError(format!("could not find binding `{}`", name))
})?;
let mut b: &Binding = self
.inner
.iter()
.find_map(|(n, b)| if n == name { Some(b) } else { None })
.ok_or_else(|| {
ExpandError::BindingError(format!("could not find binding `{}`", name))
})?;
for nesting_state in nesting.iter_mut() {
nesting_state.hit = true;
b = match b {