diff options
author | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-03-22 19:46:56 +0000 |
---|---|---|
committer | sbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 2013-03-22 19:46:56 +0000 |
commit | f74e867aab6e3a36824f5c33ed1d75bac90ef06f (patch) | |
tree | cecf6e882ad4ef16dce092ac06dff36d16c84489 /src/piraha/Bracket.cc | |
parent | 249587f1e95ea75de1e7a04161124751750e42c0 (diff) |
Updates to Piraha:
1) Added some debug code
2) Fix logic bugs that only I noticed
Still passes the ET testsuite.
git-svn-id: http://svn.cactuscode.org/flesh/trunk@4988 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/piraha/Bracket.cc')
-rw-r--r-- | src/piraha/Bracket.cc | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/piraha/Bracket.cc b/src/piraha/Bracket.cc index d1c52632..47f5c443 100644 --- a/src/piraha/Bracket.cc +++ b/src/piraha/Bracket.cc @@ -1,4 +1,5 @@ #include "Piraha.hpp" +#include <string.h> using namespace piraha; @@ -69,8 +70,9 @@ static void fail(Bracket *b,Matcher *m) { } bool Bracket::match(Matcher *m) { - if(m->pos >= (int)m->input_size) + if(m->pos >= (int)m->input_size) { return false; + } for(range_iter r = ranges.begin();r != ranges.end(); ++r) { if((*r)->match(m)) { if(neg) { @@ -93,24 +95,35 @@ bool Bracket::match(Matcher *m) { } } -std::ostream& piraha::operator<<(std::ostream& o,Bracket& b) { - for(range_iter r = b.ranges.begin();r != b.ranges.end(); ++r) { +void insertc(std::ostream& o,char c) { + if(c == '-') { + o << "\\-"; + } else if(c == '\n') { + o << "\\n"; + } else if(c == '\r') { + o << "\\r"; + } else if(c == '\t') { + o << "\\t"; + } else if(strchr("[]-",c)>=0) { + o << "\\" << c; + } else { + o << c; + } +} + +void Bracket::insert(std::ostream& o) { + o << "["; + if(neg) + o << "^"; + for(range_iter r = ranges.begin();r != ranges.end(); ++r) { char lo = (*r)->lo, hi = (*r)->hi; if(lo == hi) { - if(lo == '-') { - o << "\\-"; - } else if(lo == '\n') { - o << "\\n"; - } else if(lo == '\r') { - o << "\\r"; - } else if(lo == '\t') { - o << "\\t"; - } else { - o << lo; - } + insertc(o,lo); } else { - o << lo << '-' << hi; + insertc(o,lo); + o << '-'; + insertc(o,hi); } } - return o; + o << "]"; } |