Bash++
Bash++ compiler internal documentation
ASTNode.h
Go to the documentation of this file.
1
7#pragma once
8
9#include <cstddef>
10#include <memory>
11#include <vector>
12#include <string>
13#include <iostream>
14
15#include <AST/NodeTypes.h>
16#include <AST/Position.h>
17#include <AST/Token.h>
18
19#define PRETTYPRINT_INDENTATION_AMOUNT 4
20
21namespace AST {
22
29class ASTNode {
30 protected:
31 std::vector<std::shared_ptr<ASTNode>> children;
34
35 public:
36 ASTNode() = default;
37 virtual ~ASTNode() = default;
38
39 ASTNode(const ASTNode& other) = default;
40 ASTNode& operator=(const ASTNode& other) = default;
41 ASTNode(ASTNode&& other) noexcept = default;
42 ASTNode& operator=(ASTNode&& other) noexcept = default;
43
44 virtual constexpr AST::NodeType getType() const = 0;
45
46 void addChild(const std::shared_ptr<ASTNode>& child);
47 void addChildren(const std::vector<std::shared_ptr<ASTNode>>& childs);
48 const std::vector<std::shared_ptr<ASTNode>>& getChildren() const;
49 void setPosition(const AST::FilePosition& pos);
50 void setPosition(uint32_t line, uint32_t column);
51 const AST::FilePosition& getPosition() const;
52 void setEndPosition(const AST::FilePosition& pos);
53 void setEndPosition(uint32_t line, uint32_t column);
54 const AST::FilePosition& getEndPosition() const;
55
56 uint32_t getLine() const;
57 uint32_t getCharPositionInLine() const;
58
59 std::shared_ptr<ASTNode> getChildAt(size_t index) const;
60 std::shared_ptr<ASTNode> getFirstChild() const;
61 std::shared_ptr<ASTNode> getLastChild() const;
62 size_t getChildrenCount() const;
63
64 void clear();
65 void clearChildren();
66
67 virtual std::ostream& prettyPrint(std::ostream& os, size_t indentation_level = 0) const = 0;
68 friend std::ostream& operator<<(std::ostream& os, const ASTNode& node) {
69 return node.prettyPrint(os, 0);
70 }
71};
72
73} // namespace AST
The base class for all non-terminal nodes in the Bash++ AST. Each ASTNode contains information about ...
Definition ASTNode.h:29
virtual ~ASTNode()=default
void setEndPosition(const AST::FilePosition &pos)
Definition ASTNode.cpp:89
virtual constexpr AST::NodeType getType() const =0
virtual std::ostream & prettyPrint(std::ostream &os, size_t indentation_level=0) const =0
void clearChildren()
Definition ASTNode.cpp:144
const AST::FilePosition & getPosition() const
Definition ASTNode.cpp:85
AST::FilePosition position
Definition ASTNode.h:32
const std::vector< std::shared_ptr< ASTNode > > & getChildren() const
Definition ASTNode.cpp:72
std::shared_ptr< ASTNode > getLastChild() const
Definition ASTNode.cpp:128
AST::FilePosition end_position
Definition ASTNode.h:33
void addChildren(const std::vector< std::shared_ptr< ASTNode > > &childs)
Add a vector of child nodes to this AST node. This function also:
Definition ASTNode.cpp:44
std::shared_ptr< ASTNode > getChildAt(size_t index) const
Definition ASTNode.cpp:114
size_t getChildrenCount() const
Definition ASTNode.cpp:135
std::shared_ptr< ASTNode > getFirstChild() const
Definition ASTNode.cpp:121
ASTNode()=default
std::vector< std::shared_ptr< ASTNode > > children
Definition ASTNode.h:31
uint32_t getCharPositionInLine() const
Definition ASTNode.cpp:110
ASTNode(ASTNode &&other) noexcept=default
ASTNode & operator=(const ASTNode &other)=default
friend std::ostream & operator<<(std::ostream &os, const ASTNode &node)
Definition ASTNode.h:68
void setPosition(const AST::FilePosition &pos)
Definition ASTNode.cpp:76
void clear()
Definition ASTNode.cpp:139
const AST::FilePosition & getEndPosition() const
Definition ASTNode.cpp:98
void addChild(const std::shared_ptr< ASTNode > &child)
Add a child node to this AST node. This function also:
Definition ASTNode.cpp:21
uint32_t getLine() const
Definition ASTNode.cpp:106
ASTNode(const ASTNode &other)=default
ASTNode & operator=(ASTNode &&other) noexcept=default
Definition AccessModifier.h:10
NodeType
Definition NodeTypes.h:12
Definition Position.h:13