Example #1
0
String AbnfGenContext::generate () const
{
	String r;

	// Before normalization
	size_t origRulesCount = m_rulelist.elements().size();

	if (! m_rulelist.normalize()) {
		Logger::error(_Tr("Failed to normalize ABNF rulelist"));
		return String();
	}

	String ttcText(generateTransitionTablesClass(m_rulelist, transitionType(), sourceDataType()));
	String ttText(generateTransitionTables(m_rulelist, m_options, origRulesCount));

	if (ttcText.isEmpty() || ttText.isEmpty())
		return String();

	String headerText(generateHeader(sourceDataType()));
	String enumText(generateEnum(m_rulelist, origRulesCount));
	String actionFlags(generateActionArgs(m_rulelist, origRulesCount));
	String actionsText(generateActions(m_rulelist, origRulesCount, sourceDataType()));

	r << headerText   << String::EndOfLine
	  << enumText     << String::EndOfLine
	  << ttcText      << String::EndOfLine
	  << actionFlags  << String::EndOfLine
	  << ttText       << String::EndOfLine
	  << actionsText;

	return r;
}
Example #2
0
void PYGenerator::generate()
{
	std::string fn = gOptions.output_ + gOptions.inputFS_ + ".py";
	CodeFile f(fn);
	f.output("from bintalk import protocol_writer");
	f.output("from bintalk import protocol_reader");
	for(std::set<std::string>::iterator iter = gContext.imported_.begin();
		iter != gContext.imported_.end(); ++iter)
	{
		std::string incFilename = *iter;
		incFilename = incFilename.substr(0,incFilename.find('.'));
		f.output("from %s import *", incFilename.c_str());
	}
	for(size_t i = 0; i < gContext.definitions_.size(); i++)
	{
		Definition* definition = gContext.definitions_[i];
		if(definition->file_ != gOptions.inputFN_)
			continue;
		if (definition->getEnum())
			generateEnum(f, definition->getEnum());
		else if (definition->getStruct())
			generateStruct(f, definition->getStruct());
		else if (definition->getService())
			generateService(f, definition->getService());
	}
}
Example #3
0
void CSGenerator::generate()
{
	CodeFile f(gOptions.output_ + gOptions.inputFS_ + ".cs");
	f.output("using System.Collections.Generic;");
	for(size_t i = 0; i < gContext.definitions_.size(); i++)
	{
		Definition* definition = gContext.definitions_[i];
		if(definition->file_ != gOptions.inputFN_)
			continue;
		if (definition->getEnum())
			generateEnum(f, definition->getEnum());
		else if (definition->getStruct())
			generateStruct(f, definition->getStruct());
		else if (definition->getService())
			generateService(f, definition->getService());
	}
}
Example #4
0
void GoGenerator::generateProgram()
{
	generateEnum();
	generateStruct();
	generateService();
}