VapourSynth-llvmexpr
Loading...
Searching...
No Matches
ASTPrinter.hpp
Go to the documentation of this file.
1
19
20
#ifndef LLVMEXPR_FRONTEND_INFIX2POSTFIX_ASTPRINTER_HPP
21
#define LLVMEXPR_FRONTEND_INFIX2POSTFIX_ASTPRINTER_HPP
22
23
#include "
AST.hpp
"
24
25
#include <format>
26
#include <sstream>
27
#include <string>
28
#include <string_view>
29
30
namespace
infix2postfix
{
31
32
class
ASTPrinter
{
33
public
:
34
std::string
print
(
const
Program
* program);
35
36
private
:
37
void
print
(
const
Stmt
* stmt);
38
void
print
(
const
Expr
* expr);
39
40
// Stmt visitors
41
void
visit(
const
ExprStmt
& stmt);
42
void
visit(
const
AssignStmt
& stmt);
43
void
visit(
const
ArrayAssignStmt
& stmt);
44
void
visit(
const
BlockStmt
& stmt);
45
void
visit(
const
IfStmt
& stmt);
46
void
visit(
const
WhileStmt
& stmt);
47
void
visit(
const
ReturnStmt
& stmt);
48
void
visit(
const
LabelStmt
& stmt);
49
void
visit(
const
GotoStmt
& stmt);
50
void
visit(
const
GlobalDecl
& stmt);
51
void
visit(
const
FunctionDef
& stmt);
52
53
// Expr visitors
54
void
visit(
const
NumberExpr
& expr);
55
void
visit(
const
VariableExpr
& expr);
56
void
visit(
const
UnaryExpr
& expr);
57
void
visit(
const
BinaryExpr
& expr);
58
void
visit(
const
TernaryExpr
& expr);
59
void
visit(
const
CallExpr
& expr);
60
void
visit(
const
PropAccessExpr
& expr);
61
void
visit(
const
StaticRelPixelAccessExpr
& expr);
62
void
visit(
const
FrameDimensionExpr
& expr);
63
void
visit(
const
ArrayAccessExpr
& expr);
64
65
void
indent();
66
void
unindent();
67
68
template
<
typename
... Args>
69
void
line(
const
std::string_view format_str, Args&&... args) {
70
for
(
int
i = 0; i < indent_level; ++i) {
71
ss <<
" "
;
72
}
73
ss << std::vformat(format_str,
74
std::make_format_args(std::forward<Args>(args)...))
75
<<
"\n"
;
76
}
77
78
std::stringstream ss;
79
int
indent_level = 0;
80
};
81
82
}
// namespace infix2postfix
83
84
#endif
// LLVMEXPR_FRONTEND_INFIX2POSTFIX_ASTPRINTER_HPP
AST.hpp
infix2postfix::ASTPrinter
Definition
ASTPrinter.hpp:32
infix2postfix::ASTPrinter::print
std::string print(const Program *program)
Definition
ASTPrinter.cpp:29
infix2postfix
Definition
AnalysisEngine.cpp:29
infix2postfix::ArrayAccessExpr
Definition
AST.hpp:125
infix2postfix::ArrayAssignStmt
Definition
AST.hpp:151
infix2postfix::AssignStmt
Definition
AST.hpp:142
infix2postfix::BinaryExpr
Definition
AST.hpp:66
infix2postfix::BlockStmt
Definition
AST.hpp:159
infix2postfix::CallExpr
Definition
AST.hpp:85
infix2postfix::ExprStmt
Definition
AST.hpp:135
infix2postfix::Expr
Definition
AST.hpp:239
infix2postfix::FrameDimensionExpr
Definition
AST.hpp:117
infix2postfix::FunctionDef
Definition
AST.hpp:227
infix2postfix::GlobalDecl
Definition
AST.hpp:210
infix2postfix::GotoStmt
Definition
AST.hpp:200
infix2postfix::IfStmt
Definition
AST.hpp:166
infix2postfix::LabelStmt
Definition
AST.hpp:192
infix2postfix::NumberExpr
Definition
AST.hpp:42
infix2postfix::Program
Definition
AST.hpp:414
infix2postfix::PropAccessExpr
Definition
AST.hpp:96
infix2postfix::ReturnStmt
Definition
AST.hpp:184
infix2postfix::StaticRelPixelAccessExpr
Definition
AST.hpp:105
infix2postfix::Stmt
Definition
AST.hpp:260
infix2postfix::TernaryExpr
Definition
AST.hpp:75
infix2postfix::UnaryExpr
Definition
AST.hpp:58
infix2postfix::VariableExpr
Definition
AST.hpp:50
infix2postfix::WhileStmt
Definition
AST.hpp:176
llvmexpr
frontend
infix2postfix
ASTPrinter.hpp
Generated by
1.16.0