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