The out of orderness was actually the fault of the dot graphing program, not Kraken, so that's good news. DOT generation has also been modified so that it properly inserts \n's (actually \n's) where line returns are so that dot can parse the \n and not the line return.

This commit is contained in:
Nathan Braswell
2013-08-11 00:37:12 -04:00
parent b292bd15ae
commit ea42cb5bc7
4 changed files with 23 additions and 9 deletions

View File

@@ -5,15 +5,11 @@
#define NULL 0 #define NULL 0
#endif #endif
#include <util.h>
//#include <Symbol.h>
#include <vector> #include <vector>
#include <string> #include <string>
#include <iostream> #include <iostream>
//Circular references #include "util.h"
//class Symbol;
template<class T> template<class T>
class NodeTree { class NodeTree {
@@ -227,9 +223,12 @@ std::string NodeTree<T>::DOTGraphStringHelper() {
template<class T> template<class T>
std::string NodeTree<T>::getDOTName() { std::string NodeTree<T>::getDOTName() {
std::string DOTName = "";
if (data != NULL) if (data != NULL)
return "\"" + name + "-" + data->toString() + "_" + intToString(id) + "\""; //Note that terminals already have a quote in the front of their name, so we don't need to add one DOTName = "\"" + name + "-" + data->toString() + "_" + intToString(id) + "\""; //Note that terminals already have a quote in the front of their name, so we don't need to add one
return "\"" + name + "_" + intToString(id) + "\""; else
DOTName = "\"" + name + "_" + intToString(id) + "\"";
return(replace(DOTName, "\n", "\\n"));
} }
#endif #endif

View File

@@ -5,11 +5,13 @@
#define NULL 0 #define NULL 0
#endif #endif
//#include <iostream>
#include <string> #include <string>
#include <sstream> #include <sstream>
std::string intToString(int theInt); std::string intToString(int theInt);
std::string truncateEnd(std::string to_truncate); std::string truncateEnd(std::string to_truncate);
std::string removeBeginning(std::string to_remove); std::string removeBeginning(std::string to_remove);
std::string replace(std::string first, std::string search, std::string replace);
#endif #endif

View File

@@ -78,7 +78,7 @@ NodeTree<Symbol*>* RNGLRParser::parseInput(std::string inputString) {
std::cout << "Checking if frontier " << i << " is empty" << std::endl; std::cout << "Checking if frontier " << i << " is empty" << std::endl;
if (gss.frontierIsEmpty(i)) { if (gss.frontierIsEmpty(i)) {
std::cout << "Frontier " << i << " is empty." << std::endl; std::cout << "Frontier " << i << " is empty." << std::endl;
std::cout << "Failed on " << input[i]->toString() << " next: " << input[i+1]->toString() << std::endl; std::cout << "Failed on " << input[i]->toString() << std::endl;
break; break;
} }

View File

@@ -20,3 +20,16 @@ std::string removeBeginning(std::string to_remove)
to_return = to_return + to_remove[i]; to_return = to_return + to_remove[i];
return to_return; return to_return;
} }
std::string replace(std::string first, std::string search, std::string replace) {
size_t pos = 0;
while (pos < first.size()-search.size()) {
pos = first.find(search, pos);
if (pos == std::string::npos)
break;
//std::cout << "Position is " << pos << " size of first is " << first.size() << " size of replace is " << replace.size() << std::endl;
first = first.replace(pos, search.size(), replace);
pos++;
}
return first;
}