void GLIShaderDebug::OpenDebugSource() { //Create a filename from the source ID's SString debugFileName(debugUID); debugFileName += "_"; debugFileName += SString(debugGLID); //Can only currently debug GLSL shaders debugFileName += ".glsl"; //Make the filename lower case debugFileName.lowercase(); //Open using the current "file name" scite->OpenBuffer(debugFileName.c_str(), debugSource.c_str()); }
dParserCompiler::dParserCompiler(const dString& inputRules, const char* const outputFileName, const char* const scannerClassName) :m_shiftReduceExpectedWarnings(0) { // scan the grammar into a list of rules. int lastTerminalToken; dProductionRule ruleList; dOperatorsPrecedence operatorPrecedence; dTree<dTokenInfo, dCRCTYPE> symbolList; dString userCodeBlock; dString userVariableClass (""); dString endUserCode ("\n"); // scan grammar to a set of LR(1) rules symbolList.Insert(dTokenInfo (DACCEPTING_TOKEN, TERMINAL, DACCEPT_SYMBOL), dCRC64 (DACCEPT_SYMBOL)); symbolList.Insert(dTokenInfo (DERROR_TOKEN, TERMINAL, DERROR_SYMBOL), dCRC64 (DERROR_SYMBOL)); ScanGrammarFile(inputRules, ruleList, symbolList, operatorPrecedence, userCodeBlock, userVariableClass, endUserCode, lastTerminalToken); // convert the rules into a NFA. dString debugFileName (outputFileName); debugFileName += ".txt"; FILE* const debugFile = fopen (debugFileName.GetStr(), "w"); dTree<dState*, dCRCTYPE> stateList; CanonicalItemSets (stateList, ruleList, symbolList, operatorPrecedence, debugFile); fclose (debugFile); // create a LR(1) parsing table from the NFA graphs const dString& startSymbol = ruleList.GetFirst()->GetInfo().m_name; BuildParsingTable (stateList, dCRC64 (startSymbol.GetStr()), operatorPrecedence); //Write Parser class and header file dString className (GetClassName(outputFileName)); GenerateHeaderFile (className, scannerClassName, outputFileName, symbolList, userVariableClass); GenerateParserCode (className, scannerClassName, outputFileName, symbolList, stateList, userCodeBlock, endUserCode, lastTerminalToken); dTree<dState*, dCRCTYPE>::Iterator iter(stateList); for (iter.Begin(); iter; iter ++) { dState* const state = iter.GetNode()->GetInfo(); delete state; } }