Use std:cerr for errors
This commit is contained in:
12
main.cpp
12
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();
|
||||
|
||||
@@ -366,13 +366,13 @@ NodeTree<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* 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<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
|
||||
std::string functionCallString = concatSymbolTree(children[1]);
|
||||
NodeTree<ASTData>* 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<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
|
||||
std::vector<NodeTree<ASTData>*> 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<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
|
||||
std::vector<NodeTree<ASTData>*> transformedChildren; transformedChildren.push_back(param);
|
||||
NodeTree<ASTData>* 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<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
|
||||
std::string functionName = assignFuncName.substr(0,1);
|
||||
NodeTree<ASTData>* 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<ASTData>* ASTTransformation::transform(NodeTree<Symbol>* from, NodeTree
|
||||
} else if (name == "bool") {
|
||||
newNode = new NodeTree<ASTData>(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<ASTData>();
|
||||
}
|
||||
|
||||
@@ -1008,10 +1008,10 @@ NodeTree<ASTData>* ASTTransformation::templateFunctionLookup(NodeTree<ASTData>*
|
||||
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<NodeTree<ASTData>*> ASTTransformation::scopeLookup(NodeTree<ASTData>
|
||||
}
|
||||
|
||||
std::vector<NodeTree<ASTData>*> ASTTransformation::scopeLookup(NodeTree<ASTData>* scope, std::string lookup, bool includeModules, std::vector<NodeTree<ASTData>*> 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.
|
||||
|
||||
@@ -12,7 +12,8 @@ void CGenerator::generateCompSet(std::map<std::string, NodeTree<ASTData>*> 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<std::string, NodeTree<ASTData>*> ASTs,
|
||||
outputHFile << "#include <stdbool.h>\n#include <stdlib.h>\n#include <stdio.h>\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<ASTData>* from, NodeTree<ASTData>* 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<ASTData>* from, NodeTree<ASTData>* 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;
|
||||
|
||||
@@ -43,7 +43,7 @@ NodeTree<Symbol>* 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<Symbol>();
|
||||
}
|
||||
@@ -58,7 +58,7 @@ NodeTree<Symbol>* 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<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 << "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<Symbol>* 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user