diff options
Diffstat (limited to 'src/parse')
| -rw-r--r-- | src/parse/mod.rs | 4 | ||||
| -rw-r--r-- | src/parse/regex/bc.rs | 11 | ||||
| -rw-r--r-- | src/parse/regex/mod.rs | 20 |
3 files changed, 14 insertions, 21 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 10ea979..407cebd 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -1191,9 +1191,7 @@ pub enum ParseError { } #[derive(Debug, PartialEq)] -pub enum NotImplementedKind { - NonGreedyRegexRepetition, -} +pub enum NotImplementedKind {} type Result<T> = std::result::Result<T, ParseError>; diff --git a/src/parse/regex/bc.rs b/src/parse/regex/bc.rs index c0eff8b..6b3ca1b 100644 --- a/src/parse/regex/bc.rs +++ b/src/parse/regex/bc.rs @@ -2,12 +2,8 @@ use std::collections::{HashMap, VecDeque}; use crate::{ bitset::BitSet, - parse::{ - Parse, - regex::{ - CharacterClass, GreedyBehavior, LookDirection, LookPolarity, Pattern, - byte_range::ByteRange, - }, + parse::regex::{ + CharacterClass, GreedyBehavior, LookDirection, LookPolarity, Pattern, byte_range::ByteRange, }, }; @@ -586,6 +582,9 @@ impl TryFrom<Pattern> for BytecodeCompiledRegex { } } +#[cfg(test)] +use crate::parse::Parse; + #[test] fn print_compiled_vm() { let pat = Pattern::parse_from_bytes(b"a?b?").unwrap(); diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index 79e234f..6b7bc9e 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -1,4 +1,4 @@ -use crate::parse::{NotImplementedKind, OtherHighlights}; +use crate::parse::OtherHighlights; use super::{Parse, ParseError, Result}; @@ -234,18 +234,14 @@ fn parse_rep(s: &mut super::Cursor<'_>) -> Result<Pattern> { s.adv(); s.highlight_from(begin, OtherHighlights::RegexSymbol); - if s.has() && s.peek() == b'?' { - return Err(ParseError::NotYetImplemented( - NotImplementedKind::NonGreedyRegexRepetition, - )); - } + let greed = if s.has() && s.peek() == b'?' { + s.adv(); + GreedyBehavior::NonGreedy + } else { + GreedyBehavior::Greedy + }; - Ok(Pattern::Rep( - Box::new(atom), - min_rep, - max_rep, - GreedyBehavior::Greedy, - )) + Ok(Pattern::Rep(Box::new(atom), min_rep, max_rep, greed)) } else { Ok(atom) } |
