Ejemplo n.º 1
0
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());
}
Ejemplo n.º 2
0
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;
	}
}