CppParser
Loading...
Searching...
No Matches
cppvisitorprinter.h
Go to the documentation of this file.
1//
2// Created by saleh on 6/23/23.
3//
4
5#pragma once
6
12#include <fstream>
13#include <iostream>
14#include <sstream>
15
16#include "cppvisitorbase.h"
17#include "cppwriter.h"
18
19#define DBG_ENABLED
20#ifdef DBG_ENABLED
21#define DBG(NAME, PTR) \
22 std::cout << NAME << ":" << std::endl; \
23 std::cout << astToString(PTR) << std::endl; \
24 std::cout << "------------------------------------------"<< std::endl;
25#else
26# define DBG(NAME) void;
27#endif
28
30{
31public:
32 ~CppVisitorPrinter() override = default;
33
39 static std::string astToString(CppObj* p)
40 {
41 CppWriter w;
42 std::stringstream stm;
43 w.emit(p, stm);
44 stm.flush();
45 return stm.str();
46 }
47
48 bool visit(CppVarType* p) override
49 {
50 DBG("CppVarType", p);
51 return true;
52 }
53 bool visit(CppCompound* p) override
54 {
55 DBG("CppCompound", p);
56 return true;
57 }
58 bool visit(CppUnRecogPrePro* p) override
59 {
60 DBG("CppUnRecogPrePro", p);
61 return true;
62 }
63 bool visit(CppUndef* p) override
64 {
65 DBG("CppUndef", p);
66 return true;
67 }
68 bool visit(CppUsingDecl* p) override
69 {
70 DBG("CppUsingDecl", p);
71 return true;
72 }
73 bool visit(CppUsingNamespaceDecl* p) override
74 {
75 DBG("CppUsingNamespaceDecl", p);
76 return true;
77 }
78 bool visit(CppVar* p) override
79 {
80 DBG("CppVar", p);
81 return true;
82 }
83 bool visit(CppVarList* p) override
84 {
85 DBG("CppVarList", p);
86 return true;
87 }
89 {
90 DBG("CppCommonBlock<CppObjType::kIfBlock>", p);
91 return true;
92 }
94 {
95 DBG("CppCommonBlock<CppObjType::kWhileBlock>", p);
96 return true;
97 }
99 {
100 DBG("CppCommonBlock<CppObjType::kDoWhileBlock>", p);
101 return true;
102 }
103 bool visit(CppAsmBlock* p) override
104 {
105 DBG("CppAsmBlock", p);
106 return true;
107 }
108 bool visit(CppBlob* p) override
109 {
110 DBG("CppBlob", p);
111 return true;
112 }
113 bool visit(CppDefine* p) override
114 {
115 DBG("CppDefine", p);
116 return true;
117 }
118 bool visit(CppDocComment* p) override
119 {
120 DBG("CppDocComment", p);
121 return true;
122 }
123 bool visit(CppEnum* p) override
124 {
125 DBG("CppEnum", p);
126 return true;
127 }
128 bool visit(CppExpr* p) override
129 {
130 DBG("CppExpr", p);
131 return true;
132 }
133 bool visit(CppForBlock* p) override
134 {
135 DBG("CppForBlock", p);
136 return true;
137 }
138 bool visit(CppLambda* p) override
139 {
140 DBG("CppLambda", p);
141 return true;
142 }
143 bool visit(CppDestructor* p) override
144 {
145 DBG("CppDestructor", p);
146 return true;
147 }
148 bool visit(CppConstructor* p) override
149 {
150 DBG("CppConstructor", p);
151 return true;
152 }
153 bool visit(CppFunction* p) override
154 {
155 DBG("CppFunction", p);
156 return true;
157 }
158 bool visit(CppFunctionPointer* p) override
159 {
160 DBG("CppFunctionPointer", p);
161 return true;
162 }
163 bool visit(CppTypeConverter* p) override
164 {
165 DBG("CppTypeConverter", p);
166 return true;
167 }
168 bool visit(CppFwdClsDecl* p) override
169 {
170 DBG("CppFwdClsDecl", p);
171 return true;
172 }
173 bool visit(CppHashError* p) override
174 {
175 DBG("CppHashError", p);
176 return true;
177 }
178 bool visit(CppHashIf* p) override
179 {
180 DBG("CppHashIf", p);
181 return true;
182 }
183 bool visit(CppHashWarning* p) override
184 {
185 DBG("CppHashWarning", p);
186 return true;
187 }
188 bool visit(CppImport* p) override
189 {
190 DBG("CppImport", p);
191 return true;
192 }
193 bool visit(CppInclude* p) override
194 {
195 DBG("CppInclude", p);
196 return true;
197 }
198 bool visit(CppLabel* p) override
199 {
200 DBG("CppLabel", p);
201 return true;
202 }
203 bool visit(CppMacroCall* p) override
204 {
205 DBG("CppMacroCall", p);
206 return true;
207 }
208 bool visit(CppNamespaceAlias* p) override
209 {
210 DBG("CppNamespaceAlias", p);
211 return true;
212 }
213 bool visit(CppPragma* p) override
214 {
215 DBG("CppPragma", p);
216 return true;
217 }
218 bool visit(CppRangeForBlock* p) override
219 {
220 DBG("CppRangeForBlock", p);
221 return true;
222 }
223 bool visit(CppSwitchBlock* p) override
224 {
225 DBG("CppSwitchBlock", p);
226 return true;
227 }
228 bool visit(CppTryBlock* p) override
229 {
230 DBG("CppTryBlock", p);
231 return true;
232 }
233 bool visit(CppTypedefList* p) override
234 {
235 DBG("CppTypedefList", p);
236 return true;
237 }
238 bool visit(CppTypedefName* p) override
239 {
240 DBG("CppTypedefName", p);
241 return true;
242 }
243};
bool visit(CppInclude *p) override
bool visit(CppHashIf *p) override
bool visit(CppLabel *p) override
bool visit(CppTypeConverter *p) override
bool visit(CppCommonBlock< CppObjType::kWhileBlock > *p) override
bool visit(CppNamespaceAlias *p) override
bool visit(CppAsmBlock *p) override
bool visit(CppForBlock *p) override
bool visit(CppTypedefName *p) override
bool visit(CppDefine *p) override
bool visit(CppCompound *p) override
bool visit(CppVar *p) override
bool visit(CppMacroCall *p) override
bool visit(CppFunction *p) override
bool visit(CppLambda *p) override
bool visit(CppFunctionPointer *p) override
bool visit(CppVarType *p) override
The visitor pattern's visit methods for the given types.
bool visit(CppUnRecogPrePro *p) override
bool visit(CppPragma *p) override
bool visit(CppConstructor *p) override
bool visit(CppDocComment *p) override
bool visit(CppCommonBlock< CppObjType::kDoWhileBlock > *p) override
bool visit(CppHashError *p) override
bool visit(CppFwdClsDecl *p) override
bool visit(CppUsingNamespaceDecl *p) override
bool visit(CppVarList *p) override
bool visit(CppTypedefList *p) override
bool visit(CppHashWarning *p) override
bool visit(CppCommonBlock< CppObjType::kIfBlock > *p) override
bool visit(CppUsingDecl *p) override
bool visit(CppTryBlock *p) override
bool visit(CppDestructor *p) override
bool visit(CppImport *p) override
bool visit(CppExpr *p) override
bool visit(CppRangeForBlock *p) override
bool visit(CppSwitchBlock *p) override
bool visit(CppBlob *p) override
static std::string astToString(CppObj *p)
Converts the given pointer to an AST node to its equivalent string of code using CppWriter class.
bool visit(CppEnum *p) override
~CppVisitorPrinter() override=default
bool visit(CppUndef *p) override
Responsible for emitting C/C++ source from CppAst data structure.
Definition: cppwriter.h:40
virtual void emit(CppObj *cppObj, std::ostream &stm, CppIndent indentation=CppIndent()) const
Definition: cppwriter.cpp:70
#define DBG(NAME, PTR)
A stream of text that represents some content in a C++ program.
Definition: cppast.h:167
Some blocks have common structure like if, while, and do-while.
Definition: cppast.h:1923
All classes, structs, unions, and namespaces can be classified as a Compound object.
Definition: cppast.h:927
An expression in a C/C++ program.
Definition: cppast.h:1750
Function pointer type definition using typedef, e.g.
Definition: cppast.h:1390
Represents all variants of #if preprocessors.
Definition: cppast.h:276
An abstract class that is used as base class of all other classes.
Definition: cppast.h:134
Any other C/C++ preprocessor for which there is no class defined.
Definition: cppast.h:371
List of variables declared in a line without repeating its type, e.g.
Definition: cppast.h:699
Class to represent C++ variable definition.
Definition: cppast.h:565