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
#endif
#include <util.h>
//#include <Symbol.h>
#include <vector>
#include <string>
#include <iostream>
//Circular references
//class Symbol;
#include "util.h"
template<class T>
class NodeTree {
@@ -227,9 +223,12 @@ std::string NodeTree<T>::DOTGraphStringHelper() {
template<class T>
std::string NodeTree<T>::getDOTName() {
std::string DOTName = "";
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
return "\"" + name + "_" + intToString(id) + "\"";
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
else
DOTName = "\"" + name + "_" + intToString(id) + "\"";
return(replace(DOTName, "\n", "\\n"));
}
#endif

View File

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

View File

@@ -78,7 +78,7 @@ NodeTree<Symbol*>* RNGLRParser::parseInput(std::string inputString) {
std::cout << "Checking if frontier " << i << " is empty" << std::endl;
if (gss.frontierIsEmpty(i)) {
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;
}

View File

@@ -20,3 +20,16 @@ std::string removeBeginning(std::string to_remove)
to_return = to_return + to_remove[i];
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;
}