From 200cff6ab424be1df303145ff8c955ea8a879aa5 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Mon, 20 May 2013 22:59:57 -0400 Subject: [PATCH] Separate the toString and toDOT methods. --- include/ParseRule.h | 1 + include/Parser.h | 1 + main.cpp | 9 +++++---- src/ParseRule.cpp | 10 +++++++++- src/Parser.cpp | 12 +++++++++++- 5 files changed, 27 insertions(+), 6 deletions(-) diff --git a/include/ParseRule.h b/include/ParseRule.h index 59c2587..368ca0a 100644 --- a/include/ParseRule.h +++ b/include/ParseRule.h @@ -20,6 +20,7 @@ class ParseRule { void appendToRight(Symbol* appendee); std::string toString(); + std::string toDOT(); private: int pointerIndex; diff --git a/include/Parser.h b/include/Parser.h index a7eb461..21f371f 100644 --- a/include/Parser.h +++ b/include/Parser.h @@ -21,6 +21,7 @@ class Parser { void loadGrammer(std::string grammerInputString); std::string grammerToString(); + std::string grammerToDOT(); private: StringReader reader; std::map symbols; diff --git a/main.cpp b/main.cpp index b614fa3..31e07c1 100644 --- a/main.cpp +++ b/main.cpp @@ -41,15 +41,16 @@ int main(int argc, char* argv[]) { Parser parser; parser.loadGrammer(inputFileString); - std::cout << inputFileString << std::endl; - std::cout << parser.grammerToString(); - outFile << "digraph Kraken { \n" + parser.grammerToString() + "\n}" << std::endl; + std::cout << inputFileString << std::endl; + std::cout << parser.grammerToString() << std::endl; + std::cout << parser.grammerToDOT() << std::endl; + + outFile << parser.grammerToDOT() << std::endl; inFile.close(); outFile.close(); return(0); - } \ No newline at end of file diff --git a/src/ParseRule.cpp b/src/ParseRule.cpp index a964bcb..a620289 100644 --- a/src/ParseRule.cpp +++ b/src/ParseRule.cpp @@ -22,6 +22,14 @@ std::string ParseRule::toString() { for (int i = 0; i < rightSide.size(); i++) { concat += rightSide[i]->toString() + " "; } - return(concat + ";"); + return(concat); +} + +std::string ParseRule::toDOT() { + std::string concat = ""; + for (int i = 0; i < rightSide.size(); i++) { + concat += leftHandle->toString() + " -> " + rightSide[i]->toString() + ";\n"; + } + return(concat); } diff --git a/src/Parser.cpp b/src/Parser.cpp index 0d193b5..4722442 100644 --- a/src/Parser.cpp +++ b/src/Parser.cpp @@ -57,8 +57,18 @@ std::string Parser::grammerToString() { std::cout << "About to toString\n"; std::string concat = ""; for (int i = 0; i < loadedGrammer.size(); i++) { - concat += loadedGrammer[i]->toString() + "\n";//->toString();// + std::endl; + concat += loadedGrammer[i]->toString() + "\n"; } return(concat); } +std::string Parser::grammerToDOT() { + //Iterate through the vector, adding DOT representation of each grammer rule + std::cout << "About to DOT export\n"; + std::string concat = ""; + for (int i = 0; i < loadedGrammer.size(); i++) { + concat += loadedGrammer[i]->toDOT(); + } + return("digraph Kraken_Grammer { \n" + concat + "}"); +} +