1 #ifndef Rosebud_RosettaGenerator_H
2 #define Rosebud_RosettaGenerator_H
3 #include <Rosebud/CxxGenerator.h>
10 using Ptr = std::shared_ptr<RosettaGenerator>;
13 boost::filesystem::path rosettaFileName;
14 boost::filesystem::path implDirectoryName;
15 boost::filesystem::path nodeListFileName;
16 std::string grammarFunctionName =
"Grammar::no_name";
17 std::string cppProtection;
18 bool strictParents =
false;
24 static Ptr instance();
25 virtual std::string
name()
const override;
26 virtual std::string
purpose()
const override;
34 boost::filesystem::path fileWrtRose(
const boost::filesystem::path&);
37 void genRosettaFileBegin(std::ostream &rosetta);
38 void genRosettaFileEnd(std::ostream &rosetta);
39 void genRosettaFunctionBegin(std::ostream &rosetta);
40 void genRosettaFunctionEnd(std::ostream &rosetta);
41 void genImplFileBegin(std::ostream &impl,
const Ast::ClassPtr&);
42 void genImplFileEnd(std::ostream &impl,
const Ast::ClassPtr&);
43 void genRosettaPragmas(std::ostream &rosetta,
const std::vector<std::string>& pragmas,
const Ast::ClassPtr&);
45 size_t genRosettaPragmas(std::ostream &rosetta,
const Ast::ClassPtr&);
49 void genLeafMacros(std::ostream &rosetta,
const Ast::ClassPtr&);
50 void genClassBegin(std::ostream &rosetta,
const Ast::ClassPtr&);
51 void genClassEnd(std::ostream &rosetta,
const Ast::ClassPtr&);
52 void genClassDeclarations(std::ostream &rosetta,
const Classes&);
53 void genPropertyDataMember(std::ostream &rosetta, std::ostream &header,
const Ast::PropertyPtr&);
54 void genPropertyAccessors(std::ostream &header, std::ostream &impl,
const Ast::PropertyPtr&);
55 void genPropertyMutators(std::ostream &header, std::ostream &impl,
const Ast::PropertyPtr&);
56 void genProperty(std::ostream &rosetta, std::ostream &header, std::ostream &impl,
const Ast::PropertyPtr&);
57 void genCppConditions(std::ostream &out,
const Ast::FilePtr&,
const std::string &text);
58 void genClassDestructor(std::ostream &header, std::ostream &impl,
const Ast::ClassPtr&);
59 void genClassConstructors(std::ostream &header, std::ostream &impl,
const Ast::ClassPtr&,
const Hierarchy&);
60 void genOtherContent(std::ostream &rosetta,
const Ast::ClassPtr&,
const std::string &content);
61 std::vector<std::string> implementationFileNames(
const Classes&);
62 void adjustNodeList(
const std::shared_ptr<Ast::Project>&);
63 void genTupFile(
const std::vector<std::string> &implFileNames);
64 void genMakeFile(
const std::vector<std::string> &implFileNames);
65 void genCmakeFile(
const std::vector<std::string> &implFileNames);
Base class for generators that produce C++ code.
virtual std::string name() const override
Every generator should have a unique name.
virtual void adjustParser(Sawyer::CommandLine::Parser &) override
Add command-line switches and documentation to a parser.
virtual std::vector< std::string > propertyMutatorNames(const Ast::PropertyPtr &) const override
Mutator names for a property.
Graph containing user-defined vertices and edges.
virtual std::string propertyDataMemberName(const Ast::PropertyPtr &p) const override
Data member name for a property.
virtual std::vector< std::string > propertyAccessorNames(const Ast::PropertyPtr &) const override
Accessor names for a property.
std::shared_ptr< Project > ProjectPtr
Shared-ownership pointer to a Project.
Rosebud is a tool to generate code for ROSE.
std::vector< Ast::ClassPtr > Classes
Ordered sequence of classes.
The parser for a program command line.
virtual std::string purpose() const override
Single-line description for documentation.
std::shared_ptr< Property > PropertyPtr
Shared-ownership pointer to a Property.
std::shared_ptr< File > FilePtr
Shared-ownership pointer to a File.
std::shared_ptr< Class > ClassPtr
Shared-ownership pointer to a Class.
virtual void generate(const Ast::ProjectPtr &) override
Generate code.
Generator that produces ROSETTA output.