| 127 | } |
| 128 | |
| 129 | fn atom(&mut self) -> Result<Node, ParseError> { |
| 130 | match self.peek() { |
| 131 | Some('(') => self.group(), |
| 132 | Some('[') => self.class(), |
| 133 | Some('.') => { self.bump(); Ok(Node::AnyChar) } |
| 134 | Some('^') => { self.bump(); Ok(Node::Start) } |
| 135 | Some('$') => { self.bump(); Ok(Node::End) } |
| 136 | Some('\\') => self.escape(), |
| 137 | Some('*') | Some('+') | Some('?') => Err(self.err("nothing to repeat")), |
| 138 | Some(c) => { self.bump(); Ok(Node::Char(c)) } |
| 139 | None => Ok(Node::Empty), |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | fn group(&mut self) -> Result<Node, ParseError> { |
| 144 | self.bump(); // open paren |