diff --git a/main.cpp b/main.cpp index a534762..f55cf5f 100644 --- a/main.cpp +++ b/main.cpp @@ -24,8 +24,8 @@ int main(int argc, char* argv[]) { includePaths.push_back(""); //Local if (argc <= 1) { - std::cout << "Kraken invocation: kraken sourceFile.krak grammerFile.kgm outputName" << std::endl; - std::cout << "Or for testing do: kraken --test [optional list of names of file (.krak .expected_results) without extentions to run]" << std::endl; + std::cerr << "Kraken invocation: kraken sourceFile.krak grammerFile.kgm outputName" << std::endl; + std::cerr << "Or for testing do: kraken --test [optional list of names of file (.krak .expected_results) without extentions to run]" << std::endl; return 0; } @@ -73,13 +73,13 @@ int main(int argc, char* argv[]) { grammerInFile.open(grammerFileString); if (!grammerInFile.is_open()) { - std::cout << "Problem opening grammerInFile " << grammerFileString << "\n"; + std::cerr << "Problem opening grammerInFile " << grammerFileString << "\n"; return(1); } compiledGrammerInFile.open(grammerFileString + ".comp", std::ios::binary | std::ios::ate); if (!compiledGrammerInFile.is_open()) - std::cout << "Problem opening compiledGrammerInFile " << grammerFileString + ".comp" << "\n"; + std::cerr << "Problem opening compiledGrammerInFile " << grammerFileString + ".comp" << "\n"; //Read the input file into a string std::string grammerInputFileString; @@ -119,7 +119,7 @@ int main(int argc, char* argv[]) { parser.importTable(binaryTablePointer + 4 + sizeof(int) + gramStringLength); //Load table starting at the table section } } else { - std::cout << grammerFileString << ".comp is NOT A Valid Kraken Compiled Grammer File, aborting" << std::endl; + std::cerr << grammerFileString << ".comp is NOT A Valid Kraken Compiled Grammer File, aborting" << std::endl; return -1; } delete binaryTablePointer; @@ -130,7 +130,7 @@ int main(int argc, char* argv[]) { std::cout << "Compiled grammer file does not exist or is not up-to-date, generating table and writing it out" << std::endl; compiledGrammerOutFile.open(grammerFileString + ".comp", std::ios::binary); if (!compiledGrammerOutFile.is_open()) - std::cout << "Could not open compiled file to write either!" << std::endl; + std::cerr << "Could not open compiled file to write either!" << std::endl; compiledGrammerOutFile.write("KRAK", sizeof(char)*4); //Let us know when we load it that this is a kraken grammer file, but don't write out compiledGrammerOutFile.flush(); // the grammer txt until we create the set, so that if we fail creating it it won't look valid parser.createStateSet(); diff --git a/src/ASTTransformation.cpp b/src/ASTTransformation.cpp index 1c65953..e598df2 100644 --- a/src/ASTTransformation.cpp +++ b/src/ASTTransformation.cpp @@ -366,13 +366,13 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree if (types.size()) { newNode = functionLookup(scope, lookupName, types); if (newNode == NULL) { - std::cout << "scope lookup error! Could not find " << lookupName << " in identifier (functionLookup)" << std::endl; + std::cerr << "scope lookup error! Could not find " << lookupName << " in identifier (functionLookup)" << std::endl; throw "LOOKUP ERROR: " + lookupName; } } else { auto possibleMatches = scopeLookup(scope, lookupName); if (!possibleMatches.size()) { - std::cout << "scope lookup error! Could not find " << lookupName << " in identifier (scopeLookup)" << std::endl; + std::cerr << "scope lookup error! Could not find " << lookupName << " in identifier (scopeLookup)" << std::endl; throw "LOOKUP ERROR: " + lookupName; } newNode = possibleMatches[0]; @@ -485,7 +485,7 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree std::string functionCallString = concatSymbolTree(children[1]); NodeTree* function = doFunction(scope, functionCallString, transformedChildren, templateTypeReplacements); if (function == NULL) { - std::cout << "scope lookup error! Could not find " << functionCallString << " in boolean stuff " << std::endl; + std::cerr << "scope lookup error! Could not find " << functionCallString << " in boolean stuff " << std::endl; throw "LOOKUP ERROR: " + functionCallString; } newNode = function; @@ -518,13 +518,13 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree std::vector*> transformedChildren; transformedChildren.push_back(lhs); transformedChildren.push_back(rhs); newNode = doFunction(scope, functionCallName, transformedChildren, templateTypeReplacements); if (newNode == NULL) { - std::cout << "scope lookup error! Could not find " << functionCallName << " in expression " << std::endl; + std::cerr << "scope lookup error! Could not find " << functionCallName << " in expression " << std::endl; throw "LOOKUP ERROR: " + functionCallName; } // //Set the value of this function call if (newNode->getDataRef()->valueType == NULL && rhs->getDataRef()->valueType) { - std::cout << "The value type from doFunction was null! (for " << functionCallName << ")" << std::endl; + std::cerr << "The value type from doFunction was null! (for " << functionCallName << ")" << std::endl; newNode->getDataRef()->valueType = rhs->getDataRef()->valueType; } //else @@ -554,7 +554,7 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree std::vector*> transformedChildren; transformedChildren.push_back(param); NodeTree* function = doFunction(scope, funcName, transformedChildren, templateTypeReplacements); if (function == NULL) { - std::cout << "scope lookup error! Could not find " << funcName << " in factor " << std::endl; + std::cerr << "scope lookup error! Could not find " << funcName << " in factor " << std::endl; throw "LOOKUP ERROR: " + funcName; } @@ -586,7 +586,7 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree std::string functionName = assignFuncName.substr(0,1); NodeTree* operatorCall = doFunction(scope, functionName, transformedChildren, templateTypeReplacements); if (operatorCall == NULL) { - std::cout << "scope lookup error! Could not find " << functionName << " in assignment_statement " << std::endl; + std::cerr << "scope lookup error! Could not find " << functionName << " in assignment_statement " << std::endl; throw "LOOKUP ERROR: " + functionName; } newNode->addChild(lhs); @@ -686,13 +686,13 @@ NodeTree* ASTTransformation::transform(NodeTree* from, NodeTree } else if (name == "bool") { newNode = new NodeTree(name, ASTData(value, Symbol(concatSymbolTree(children[0]), true), new Type(boolean, 0))); //Indirection of 0 for character } else if (name == "AmbiguityPackOuter" || name == "AmbiguityPackInner") { - std::cout << "///////////////////////////////////////////////////////////////////////////////" << std::endl; - std::cout << "Ambigious program when parsed by this grammer! This is a bug, please report it." << std::endl; - std::cout << "///////////////////////////////////////////////////////////////////////////////" << std::endl; + std::cerr << "///////////////////////////////////////////////////////////////////////////////" << std::endl; + std::cerr << "Ambigious program when parsed by this grammer! This is a bug, please report it." << std::endl; + std::cerr << "///////////////////////////////////////////////////////////////////////////////" << std::endl; throw "Ambigious parse!"; } else { // Should get rid of this eventually. Right now it handles cases like sign, alpha, a comma, etc - std::cout << "Unhandled syntax node: " << name << std::endl; + std::cerr << "Unhandled syntax node: " << name << std::endl; return new NodeTree(); } @@ -1008,10 +1008,10 @@ NodeTree* ASTTransformation::templateFunctionLookup(NodeTree* std::cout << "Current function fits, satisfying " << currentTraitsSatisfied << " traits" << std::endl; } if (!mostFittingTemplates.size()) { - std::cout << "No template functions fit for " << lookup << "!" << std::endl; + std::cerr << "No template functions fit for " << lookup << "!" << std::endl; throw "No matching template functions"; } else if (mostFittingTemplates.size() > 1) { - std::cout << "Multiple template functions fit with equal number of traits satisfied for " << lookup << "!" << std::endl; + std::cerr << "Multiple template functions fit with equal number of traits satisfied for " << lookup << "!" << std::endl; throw "Multiple matching template functions"; } return *mostFittingTemplates.begin(); @@ -1049,7 +1049,7 @@ std::vector*> ASTTransformation::scopeLookup(NodeTree } std::vector*> ASTTransformation::scopeLookup(NodeTree* scope, std::string lookup, bool includeModules, std::vector*> visited) { - std::cout << "Scp[e looking up " << lookup << std::endl; + std::cout << "Scp][e looking up " << lookup << std::endl; // Don't visit this node again when looking for the smae lookup. Note that we don't prevent coming back for the scope operator, as that should be able to come back. visited.push_back(scope); //We first check to see if it's one of the special reserved identifiers (only this, for now) and return early if it is. diff --git a/src/CGenerator.cpp b/src/CGenerator.cpp index 881cf21..00dae33 100644 --- a/src/CGenerator.cpp +++ b/src/CGenerator.cpp @@ -12,7 +12,8 @@ void CGenerator::generateCompSet(std::map*> ASTs, std::string buildString = "#!/bin/sh\ncc -std=c99 "; std::cout << "\n\n =====GENERATE PASS===== \n\n" << std::endl; if (mkdir(("./" + outputName).c_str(), 0755)) { - std::cout << "Could not make directory " << outputName << std::endl; + std::cerr << "\n\n =====GENERATE PASS===== \n\n" << std::endl; + std::cerr << "Could not make directory " << outputName << std::endl; //throw "could not make directory "; } @@ -27,7 +28,7 @@ void CGenerator::generateCompSet(std::map*> ASTs, outputHFile << "#include \n#include \n#include \n" << chPair.first; outputCFile << "#include \"" + outputName + ".h\"\n\n" << chPair.second; } else { - std::cout << "Cannot open file " << outputName << ".c/h" << std::endl; + std::cerr << "Cannot open file " << outputName << ".c/h" << std::endl; } outputCFile.close(); outputHFile.close(); @@ -244,7 +245,7 @@ std::string CGenerator::generate(NodeTree* from, NodeTree* enc case translation_unit: { // Should not happen! We do this in it's own function now! - std::cout << "Trying to normal generate a translation unit! That's a nono! (" << from->getDataRef()->toString() << ")" << std::endl; + std::cerr << "Trying to normal generate a translation unit! That's a nono! (" << from->getDataRef()->toString() << ")" << std::endl; throw "That's not gonna work"; } break; @@ -262,7 +263,7 @@ std::string CGenerator::generate(NodeTree* from, NodeTree* enc if (enclosingObject) return "this"; else - std::cout << "Error: this used in non-object scope" << std::endl; + std::cerr << "Error: this used in non-object scope" << std::endl; } //If we're in an object method, and our enclosing scope is that object, we're a member of the object and should use the this reference. std::string preName; diff --git a/src/RNGLRParser.cpp b/src/RNGLRParser.cpp index c95a526..4867b52 100644 --- a/src/RNGLRParser.cpp +++ b/src/RNGLRParser.cpp @@ -43,7 +43,7 @@ NodeTree* RNGLRParser::parseInput(std::string inputString) { std::cout << "Accepted!" << std::endl; return getNullableParts((*(stateSets[0]->getBasis()))[0]->getLeftSide()); } else { - std::cout << "Rejected, no input (with no accepting state)" << std::endl; + std::cerr << "Rejected, no input (with no accepting state)" << std::endl; } return new NodeTree(); } @@ -58,7 +58,7 @@ NodeTree* RNGLRParser::parseInput(std::string inputString) { currentToken = lexer.next(); //std::cout << "CurrentToken is " << currentToken.toString() << std::endl; if (currentToken == invalidSymbol) { - std::cout << "Invalid Symbol!" << std::endl; + std::cerr << "Invalid Symbol!" << std::endl; throw "Invalid Symbol, cannot lex"; } input.push_back(currentToken); @@ -99,16 +99,16 @@ NodeTree* 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 << "Parsing failed on " << input[i].toString() << std::endl; - std::cout << "Problem is on line: " << findLine(i) << std::endl; - std::cout << "Nearby is:" << std::endl; + std::cerr << "Parsing failed on " << input[i].toString() << std::endl; + std::cerr << "Problem is on line: " << findLine(i) << std::endl; + std::cerr << "Nearby is:" << std::endl; int range = 10; for (int j = (i-range >= 0 ? i-range : 0); j < (i+range < input.size() ? i+range : input.size()); j++) if (j == i) - std::cout << "||*||*||" << input[j].toString() << "||*||*|| "; + std::cerr << "||*||*||" << input[j].toString() << "||*||*|| "; else - std::cout << input[j].toString() << " "; - std::cout << std::endl; + std::cerr << input[j].toString() << " "; + std::cerr << std::endl; range = 1; /* std::cout << "\n\n\nThe states in the GSS at last frontiers:" << std::endl; for (int j = (i-range >= 0 ? i-range : 0); j < i; j++) { @@ -138,7 +138,7 @@ NodeTree* RNGLRParser::parseInput(std::string inputString) { return gss.getEdge(accState, v0); } - std::cout << "Rejected!" << std::endl; + std::cerr << "Rejected!" << std::endl; // std::cout << "GSS:\n" << gss.toString() << std::endl; return NULL; }