summaryrefslogtreecommitdiff
path: root/src/piraha/Bracket.cc
diff options
context:
space:
mode:
authorsbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-03-22 19:46:56 +0000
committersbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-03-22 19:46:56 +0000
commitf74e867aab6e3a36824f5c33ed1d75bac90ef06f (patch)
treececf6e882ad4ef16dce092ac06dff36d16c84489 /src/piraha/Bracket.cc
parent249587f1e95ea75de1e7a04161124751750e42c0 (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.cc45
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 << "]";
}