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; }
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()); } }
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()); } }
void GoGenerator::generateProgram() { generateEnum(); generateStruct(); generateService(); }