summaryrefslogtreecommitdiff
path: root/src/theory/strings/regexp_operation.cpp
diff options
context:
space:
mode:
authorTianyi Liang <tianyi-liang@uiowa.edu>2013-11-11 19:45:07 -0600
committerTianyi Liang <tianyi-liang@uiowa.edu>2013-11-11 19:45:07 -0600
commit3e8490e19b90e57decbfb380001407bcc7d84ca4 (patch)
tree5d85782eac5817d53f064d55dba628979a88644a /src/theory/strings/regexp_operation.cpp
parent88e9e4a93f0b4b180af94dc4cff931400eb862f1 (diff)
length lemma is changed, var-split lemma is changed
Diffstat (limited to 'src/theory/strings/regexp_operation.cpp')
-rw-r--r--src/theory/strings/regexp_operation.cpp136
1 files changed, 70 insertions, 66 deletions
diff --git a/src/theory/strings/regexp_operation.cpp b/src/theory/strings/regexp_operation.cpp
index fa686dd9f..a3921bb42 100644
--- a/src/theory/strings/regexp_operation.cpp
+++ b/src/theory/strings/regexp_operation.cpp
@@ -237,7 +237,7 @@ Node RegExpOpr::derivativeSingle( Node r, CVC4::String c ) {
vec_nodes.push_back( dc );
}
}
- Trace("strings-regexp-derivative") << "RegExp-derivative OR R[" << i << "]{ " << mkString(r[i]) << " returns " << (dc.isNull() ? "NULL" : mkString(dc) ) << std::endl;
+ Trace("strings-regexp-derivative") << "RegExp-derivative OR R[" << i << "]{ " << mkString(r[i]) << " returns " << mkString(dc) << std::endl;
}
retNode = vec_nodes.size() == 0 ? Node::null() :
( vec_nodes.size()==1 ? vec_nodes[0] : NodeManager::currentNM()->mkNode( kind::REGEXP_OR, vec_nodes ) );
@@ -321,7 +321,7 @@ Node RegExpOpr::derivativeSingle( Node r, CVC4::String c ) {
}
d_dv_cache[dv] = retNode;
}
- Trace("strings-regexp-derivative") << "RegExp-derivative returns : " << ( retNode.isNull() ? "NULL" : mkString( retNode ) ) << std::endl;
+ Trace("strings-regexp-derivative") << "RegExp-derivative returns : " << mkString( retNode ) << std::endl;
return retNode;
}
@@ -577,79 +577,83 @@ std::string RegExpOpr::niceChar( Node r ) {
}
std::string RegExpOpr::mkString( Node r ) {
std::string retStr;
- int k = r.getKind();
- switch( k ) {
- case kind::STRING_TO_REGEXP:
- {
- retStr += niceChar( r[0] );
- }
- break;
- case kind::REGEXP_CONCAT:
- {
- retStr += "(";
- for(unsigned i=0; i<r.getNumChildren(); ++i) {
- if(i != 0) retStr += ".";
- retStr += mkString( r[i] );
+ if(r.isNull()) {
+ retStr = "EmptySet";
+ } else {
+ int k = r.getKind();
+ switch( k ) {
+ case kind::STRING_TO_REGEXP:
+ {
+ retStr += niceChar( r[0] );
}
- retStr += ")";
- }
- break;
- case kind::REGEXP_OR:
- {
- if(r == d_sigma) {
- retStr += "{A}";
- } else {
+ break;
+ case kind::REGEXP_CONCAT:
+ {
retStr += "(";
for(unsigned i=0; i<r.getNumChildren(); ++i) {
- if(i != 0) retStr += "|";
+ if(i != 0) retStr += ".";
retStr += mkString( r[i] );
}
retStr += ")";
}
- }
- break;
- case kind::REGEXP_INTER:
- {
- retStr += "(";
- for(unsigned i=0; i<r.getNumChildren(); ++i) {
- if(i != 0) retStr += "&";
- retStr += mkString( r[i] );
+ break;
+ case kind::REGEXP_OR:
+ {
+ if(r == d_sigma) {
+ retStr += "{A}";
+ } else {
+ retStr += "(";
+ for(unsigned i=0; i<r.getNumChildren(); ++i) {
+ if(i != 0) retStr += "|";
+ retStr += mkString( r[i] );
+ }
+ retStr += ")";
+ }
}
- retStr += ")";
- }
- break;
- case kind::REGEXP_STAR:
- {
- retStr += mkString( r[0] );
- retStr += "*";
- }
- break;
- case kind::REGEXP_PLUS:
- {
- retStr += mkString( r[0] );
- retStr += "+";
- }
- break;
- case kind::REGEXP_OPT:
- {
- retStr += mkString( r[0] );
- retStr += "?";
- }
- break;
- case kind::REGEXP_RANGE:
- {
- retStr += "[";
- retStr += niceChar( r[0] );
- retStr += "-";
- retStr += niceChar( r[1] );
- retStr += "]";
+ break;
+ case kind::REGEXP_INTER:
+ {
+ retStr += "(";
+ for(unsigned i=0; i<r.getNumChildren(); ++i) {
+ if(i != 0) retStr += "&";
+ retStr += mkString( r[i] );
+ }
+ retStr += ")";
+ }
+ break;
+ case kind::REGEXP_STAR:
+ {
+ retStr += mkString( r[0] );
+ retStr += "*";
+ }
+ break;
+ case kind::REGEXP_PLUS:
+ {
+ retStr += mkString( r[0] );
+ retStr += "+";
+ }
+ break;
+ case kind::REGEXP_OPT:
+ {
+ retStr += mkString( r[0] );
+ retStr += "?";
+ }
+ break;
+ case kind::REGEXP_RANGE:
+ {
+ retStr += "[";
+ retStr += niceChar( r[0] );
+ retStr += "-";
+ retStr += niceChar( r[1] );
+ retStr += "]";
+ }
+ break;
+ default:
+ //TODO: special sym: sigma, none, all
+ Trace("strings-error") << "Unsupported term: " << r << " in RegExp." << std::endl;
+ //AlwaysAssert( false );
+ //return Node::null();
}
- break;
- default:
- //TODO: special sym: sigma, none, all
- Trace("strings-error") << "Unsupported term: " << r << " in RegExp." << std::endl;
- //AlwaysAssert( false );
- //return Node::null();
}
return retStr;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback