impl<'input, 'builder, E> Iterator for Matcher<'input, 'builder, E> { type Item = Result<(usize, Token<'input>, usize), ParseError<usize, Token<'input>, E>>;
fn next(&mutself) -> Option<Self::Item> { loop { let text = self.text; let start_offset = self.consumed; if text.is_empty() { self.consumed = start_offset; return None;
} else { let matches = self.regex_set.matches(text); if !matches.matched_any() { return Some(Err(ParseError::InvalidToken {
location: start_offset,
}));
} else { letmut longest_match = 0; letmut index = 0; letmut skip = false; for i in matches.iter() { let entry = &self.regex_vec[i]; let match_ = entry.regex.find(text).unwrap(); let len = match_.end(); if len >= longest_match {
longest_match = len;
index = i;
skip = entry.skip;
}
}
let result = &text[..longest_match]; let remaining = &text[longest_match..]; let end_offset = start_offset + longest_match; self.text = remaining; self.consumed = end_offset;
// Skip any whitespace matches if skip { if longest_match == 0 { return Some(Err(ParseError::InvalidToken {
location: start_offset,
}));
} continue;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.