From f74e867aab6e3a36824f5c33ed1d75bac90ef06f Mon Sep 17 00:00:00 2001 From: sbrandt Date: Fri, 22 Mar 2013 19:46:56 +0000 Subject: 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 --- src/piraha/Bracket.cc | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'src/piraha/Bracket.cc') 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 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 << "]"; } -- cgit v1.2.3