tcalc 0.2.0
 
Loading...
Searching...
No Matches
print.hpp
Go to the documentation of this file.
1
12#pragma once
13
14#include <cstddef>
15#include <iostream>
16#include <ostream>
17#include <string>
18
21#include "tcalc/ast/node.hpp"
22#include "tcalc/ast/number.hpp"
24#include "tcalc/common.hpp"
25#include "tcalc/error.hpp"
27
28namespace tcalc::ast {
29
34class TCALC_PUBLIC PrintVisitor : public BaseVisitor<void>
35{
36public:
37 constexpr static std::size_t INDENT_STEP = 2;
39private:
40 std::ostream* _os;
41 std::size_t _indent{ 0 };
42 std::size_t _step;
43
44public:
51 PrintVisitor(std::ostream& os = std::cout, std::size_t step = INDENT_STEP)
52 : _os{ &os }
53 , _step{ step }
54 {
55 }
56
57 ~PrintVisitor() override = default;
58
59 error::Result<void> visit_bin_op(NodePtr<BinaryOpNode>& node) override;
60 error::Result<void> visit_unary_op(NodePtr<UnaryOpNode>& node) override;
61 error::Result<void> visit_number(NodePtr<NumberNode>& node) override;
62 error::Result<void> visit_varref(NodePtr<VarRefNode>& node) override;
63 error::Result<void> visit_varassign(NodePtr<VarAssignNode>& node) override;
64 error::Result<void> visit_fcall(NodePtr<FcallNode>& node) override;
65 error::Result<void> visit_fdef(NodePtr<FdefNode>& node) override;
66 error::Result<void> visit_if(NodePtr<IfNode>& node) override;
67 error::Result<void> visit_program(NodePtr<ProgramNode>& node) override;
68 error::Result<void> visit_import(NodePtr<ProgramImportNode>& node) override;
69
70private:
76 [[nodiscard]] TCALC_INLINE auto _gen_indent() const
77 {
78 return std::string(_indent, ' ');
79 }
80
85 TCALC_INLINE void _step_indent() { _indent += _step; }
86
91 TCALC_INLINE void _unstep_indent() { _indent -= _step; }
92};
93
94}
Base visitor class.
Binary operation node.
Base visitor class with default return type.
Definition base.hpp:46
Visitor for printing AST.
Definition print.hpp:35
PrintVisitor(std::ostream &os=std::cout, std::size_t step=INDENT_STEP)
Construct a new Print Visitor object.
Definition print.hpp:51
tcalc common header.
tcalc error definition.
_TCALC_EXPECTED_NS::expected< T, Error > Result
Result type.
Definition error.hpp:153
Function node.
Base class for AST nodes.
std::shared_ptr< NT > NodePtr
Shared pointer to a node.
Definition node.hpp:119
Number AST node.
Variable node.