diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2010-07-27 19:53:10 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2010-07-27 19:53:10 +0000 |
| commit | 93da3b2e411059f580bcc3e2e13b0bd6bf2e16fe (patch) | |
| tree | 68def778a44019ade3109d29041c44dc0e2255c2 /libcxx/include/regex | |
| parent | 6b197e0651cd15c962da5e9ae281ecfbe754c1d1 (diff) | |
| download | bcm5719-llvm-93da3b2e411059f580bcc3e2e13b0bd6bf2e16fe.tar.gz bcm5719-llvm-93da3b2e411059f580bcc3e2e13b0bd6bf2e16fe.zip | |
grep and egrep grammars
llvm-svn: 109534
Diffstat (limited to 'libcxx/include/regex')
| -rw-r--r-- | libcxx/include/regex | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/libcxx/include/regex b/libcxx/include/regex index b59a87c4d3a..4d132a129fb 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -2701,6 +2701,12 @@ private: template <class _ForwardIterator> _ForwardIterator __parse_pattern_character(_ForwardIterator __first, _ForwardIterator __last); + template <class _ForwardIterator> + _ForwardIterator + __parse_grep(_ForwardIterator __first, _ForwardIterator __last); + template <class _ForwardIterator> + _ForwardIterator + __parse_egrep(_ForwardIterator __first, _ForwardIterator __last); void __push_l_anchor() {__left_anchor_ = true;} void __push_r_anchor(); @@ -2832,8 +2838,10 @@ basic_regex<_CharT, _Traits>::__parse(_ForwardIterator __first, case awk: break; case grep: + __parse_grep(__first, __last); break; case egrep: + __parse_egrep(__first, __last); break; default: throw regex_error(regex_constants::__re_err_grammar); @@ -4109,6 +4117,68 @@ basic_regex<_CharT, _Traits>::__parse_pattern_character(_ForwardIterator __first } template <class _CharT, class _Traits> +template <class _ForwardIterator> +_ForwardIterator +basic_regex<_CharT, _Traits>::__parse_grep(_ForwardIterator __first, + _ForwardIterator __last) +{ + __owns_one_state<_CharT>* __sa = __end_; + _ForwardIterator __t1 = _STD::find(__first, __last, _CharT('\n')); + if (__t1 != __first) + __parse_basic_reg_exp(__first, __t1); + else + __push_empty(); + __first = __t1; + if (__first != __last) + ++__first; + while (__first != __last) + { + __t1 = _STD::find(__first, __last, _CharT('\n')); + __owns_one_state<_CharT>* __sb = __end_; + if (__t1 != __first) + __parse_basic_reg_exp(__first, __t1); + else + __push_empty(); + __push_alternation(__sa, __sb); + __first = __t1; + if (__first != __last) + ++__first; + } + return __first; +} + +template <class _CharT, class _Traits> +template <class _ForwardIterator> +_ForwardIterator +basic_regex<_CharT, _Traits>::__parse_egrep(_ForwardIterator __first, + _ForwardIterator __last) +{ + __owns_one_state<_CharT>* __sa = __end_; + _ForwardIterator __t1 = _STD::find(__first, __last, _CharT('\n')); + if (__t1 != __first) + __parse_extended_reg_exp(__first, __t1); + else + __push_empty(); + __first = __t1; + if (__first != __last) + ++__first; + while (__first != __last) + { + __t1 = _STD::find(__first, __last, _CharT('\n')); + __owns_one_state<_CharT>* __sb = __end_; + if (__t1 != __first) + __parse_extended_reg_exp(__first, __t1); + else + __push_empty(); + __push_alternation(__sa, __sb); + __first = __t1; + if (__first != __last) + ++__first; + } + return __first; +} + +template <class _CharT, class _Traits> void basic_regex<_CharT, _Traits>::__push_loop(size_t __min, size_t __max, __owns_one_state<_CharT>* __s, size_t __mexp_begin, size_t __mexp_end, |

