retdec
output_manager.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_HLL_OUTPUT_MANAGER_H
8 #define RETDEC_LLVMIR2HLL_HLL_OUTPUT_MANAGER_H
9 
10 #include <string>
11 
13 
14 namespace retdec {
15 namespace llvmir2hll {
16 
21 {
22  // Ctors, dtros.
23  public:
24  virtual ~OutputManager();
25  virtual void finalize();
26 
27  // Configuration methods.
28  //
29  public:
30  void setCommentPrefix(const std::string& prefix);
31  const std::string& getCommentPrefix() const;
32 
33  void setOutputLanguage(const std::string& lang);
34  const std::string& getOutputLanguage() const;
35 
36  // Tokens.
37  //
38  public:
39  // new line
40  virtual void newLine() = 0;
41  // any whitespace
42  virtual void space(const std::string& space = " ") = 0;
43  // e.g. (){}[];
44  virtual void punctuation(char p) = 0;
45  // e.g. == - + * -> .
46  virtual void operatorX(const std::string& op) = 0;
47  // identifiers
48  virtual void globalVariableId(const std::string& id) = 0;
49  virtual void localVariableId(const std::string& id) = 0;
50  virtual void memberId(const std::string& id) = 0;
51  virtual void labelId(const std::string& id) = 0;
52  virtual void functionId(const std::string& id) = 0;
53  virtual void parameterId(const std::string& id) = 0;
54  // other
55  virtual void keyword(const std::string& k) = 0;
56  virtual void dataType(const std::string& t) = 0;
57  virtual void preprocessor(const std::string& p) = 0;
58  virtual void include(const std::string& i) = 0;
59  // constants
60  virtual void constantBool(const std::string& c) = 0;
61  virtual void constantInt(const std::string& c) = 0;
62  virtual void constantFloat(const std::string& c) = 0;
63  virtual void constantString(const std::string& c) = 0;
64  virtual void constantSymbol(const std::string& c) = 0;
65  virtual void constantPointer(const std::string& c) = 0;
66  // comment_prefix comment
67  virtual void comment(
68  const std::string& comment) = 0;
69 
70  // Special methods.
71  //
72  public:
73  // Any token added to the end of the line is going to be a comment.
74  virtual void commentModifier() = 0;
75 
83  virtual void addressPush(Address a) = 0;
86  virtual void addressPop() = 0;
87 
88  // Helpers to create more complex token sequences.
89  //
90  public:
91  // [space]op[space]
92  virtual void operatorX(
93  const std::string& op,
94  bool spaceBefore,
95  bool spaceAfter);
96  // indent// comment
97  virtual void comment(
98  const std::string& comment,
99  const std::string& indent);
100  // [indent]// comment\n
101  virtual void commentLine(
102  const std::string& comment,
103  const std::string& indent = "");
104  // [indent]#include <include>[ // comment]
105  virtual void includeLine(
106  const std::string& header,
107  const std::string& indent = "",
108  const std::string& comment = "");
109  // [indent]typedef t1 t2;
110  virtual void typedefLine(
111  const std::string& indent,
112  const std::string& t1,
113  const std::string& t2);
114 
115  // Data.
116  //
117  private:
118  std::string _commentPrefix;
119  std::string _outLanguage;
120 };
121 
122 } // namespace llvmir2hll
123 } // namespace retdec
124 
125 #endif
Definition: address.h:21
Definition: output_manager.h:21
virtual void dataType(const std::string &t)=0
virtual void keyword(const std::string &k)=0
virtual void constantInt(const std::string &c)=0
virtual void punctuation(char p)=0
virtual void parameterId(const std::string &id)=0
virtual void memberId(const std::string &id)=0
virtual void commentLine(const std::string &comment, const std::string &indent="")
Definition: output_manager.cpp:69
std::string _commentPrefix
Definition: output_manager.h:118
void setCommentPrefix(const std::string &prefix)
Definition: output_manager.cpp:22
void setOutputLanguage(const std::string &lang)
Definition: output_manager.cpp:32
virtual void functionId(const std::string &id)=0
virtual void comment(const std::string &comment)=0
virtual void constantBool(const std::string &c)=0
virtual void globalVariableId(const std::string &id)=0
virtual void operatorX(const std::string &op)=0
virtual void addressPush(Address a)=0
const std::string & getOutputLanguage() const
Definition: output_manager.cpp:37
virtual void constantSymbol(const std::string &c)=0
virtual void include(const std::string &i)=0
virtual void preprocessor(const std::string &p)=0
virtual void constantString(const std::string &c)=0
virtual void includeLine(const std::string &header, const std::string &indent="", const std::string &comment="")
Definition: output_manager.cpp:77
virtual void labelId(const std::string &id)=0
std::string _outLanguage
Definition: output_manager.h:119
virtual ~OutputManager()
Definition: output_manager.cpp:12
virtual void space(const std::string &space=" ")=0
virtual void localVariableId(const std::string &id)=0
virtual void typedefLine(const std::string &indent, const std::string &t1, const std::string &t2)
Definition: output_manager.cpp:93
virtual void constantPointer(const std::string &c)=0
virtual void finalize()
Definition: output_manager.cpp:17
const std::string & getCommentPrefix() const
Definition: output_manager.cpp:27
virtual void constantFloat(const std::string &c)=0
A library providing API for working with back-end IR.
Definition: archive_wrapper.h:19
Aliases for several useful types.