+void processLetExpression (char * constraint){
+ int constrSize = strlen(constraint);
+ char * replace = (char *) malloc(constrSize);
+ for (int i=0; i< constrSize; i++){
+ replace[i] = 0;
+ }
+ int offset = 1;
+ offset +=4;
+ skipwhitespace(constraint, offset);
+ ASSERT(strncmp(&constraint[offset], "((a!1",5) == 0);
+ offset +=5;
+ skipwhitespace(constraint, offset);
+ int startOffset = offset;
+ processEquality(constraint, offset);
+ strncpy(replace, &constraint[startOffset], offset-startOffset);
+ while(constraint[offset] == ')')
+ offset++;
+ skipwhitespace(constraint, offset);
+ string modified = "";
+ while(offset < constrSize){
+ bool done = false;
+ while(strncmp(&constraint[offset], "a!1",3) != 0){
+ modified += constraint[offset++];
+ if(offset >= constrSize -2){ //Not considering ) and \n ...
+ ASSERT(constraint[constrSize-1] == '\n');
+ ASSERT(constraint[constrSize-2] == ')');
+ done = true;
+ break;
+ }
+ }
+ if(done){
+ break;
+ }
+ offset += 3;
+ modified += replace;
+ }
+ strcpy(constraint, modified.c_str());
+ cout << "modified:*****" << modified << "****\n";
+ free(replace);
+}
+