|
MXVM 1.8.1
Virtual Machine, Compiler, and Pascal Frontend
|
Abstract base class for all AST nodes. More...
#include <ast.hpp>

Public Member Functions | |
| virtual | ~ASTNode ()=default |
| virtual void | accept (ASTVisitor &visitor)=0 |
| Accept an ASTVisitor (double-dispatch). | |
| virtual std::string | toString () const =0 |
| Return a human-readable description of this node. | |
| virtual void | print (std::ostream &out, int indent=0) const |
| Pretty-print this node to a stream with indentation. | |
| void | setLineNumber (int line) |
| Set the originating source line number. | |
| int | getLineNumber () const |
| Get the originating source line number. | |
Private Attributes | |
| int | line_number = 0 |
| source line number where this node originated | |
Abstract base class for all AST nodes.
Every concrete AST node inherits from this class, implementing the visitor pattern via accept() and providing a debug string via toString().
|
virtualdefault |
|
pure virtual |
Accept an ASTVisitor (double-dispatch).
Implemented in pascal::AddressOfNode, pascal::ArrayAccessNode, pascal::ArrayAssignmentNode, pascal::ArrayDeclarationNode, pascal::ArrayTypeDeclarationNode, pascal::ArrayTypeNode, pascal::AssignmentNode, pascal::BinaryOpNode, pascal::BlockNode, pascal::BooleanNode, pascal::BreakNode, pascal::CaseStmtNode, pascal::CompoundStmtNode, pascal::ConstDeclNode, pascal::ContinueNode, pascal::EmptyStmtNode, pascal::EnumTypeDeclNode, pascal::ExitNode, pascal::FieldAccessNode, pascal::ForStmtNode, pascal::FuncCallNode, pascal::FuncDeclNode, pascal::GotoStmtNode, pascal::IfStmtNode, pascal::LabelStmtNode, pascal::NilNode, pascal::NumberNode, pascal::ParameterNode, pascal::PointerDerefNode, pascal::PointerTypeNode, pascal::ProcCallNode, pascal::ProcDeclNode, pascal::ProgramNode, pascal::RecordDeclarationNode, pascal::RecordTypeNode, pascal::RepeatStmtNode, pascal::SetLiteralNode, pascal::SetTypeNode, pascal::SimpleTypeNode, pascal::StringNode, pascal::TypeAliasNode, pascal::TypeDeclNode, pascal::UnaryOpNode, pascal::UnitNode, pascal::VarDeclNode, pascal::VariableNode, pascal::WhileStmtNode, and pascal::WithStmtNode.
Referenced by pascal::CodeGenVisitor::eval(), and pascal::CodeGenVisitor::generate().
|
inline |
Get the originating source line number.
Definition at line 40 of file ast.hpp.
References line_number.
|
virtual |
Pretty-print this node to a stream with indentation.
Definition at line 17 of file ast.cpp.
References toString().
|
inline |
Set the originating source line number.
Definition at line 38 of file ast.hpp.
References line_number.
|
pure virtual |
Return a human-readable description of this node.
Implemented in pascal::AddressOfNode, pascal::ArrayAccessNode, pascal::ArrayAssignmentNode, pascal::ArrayDeclarationNode, pascal::ArrayTypeDeclarationNode, pascal::ArrayTypeNode, pascal::AssignmentNode, pascal::BinaryOpNode, pascal::BlockNode, pascal::BooleanNode, pascal::BreakNode, pascal::CaseStmtNode, pascal::CompoundStmtNode, pascal::ConstDeclNode, pascal::ContinueNode, pascal::EmptyStmtNode, pascal::EnumTypeDeclNode, pascal::ExitNode, pascal::FieldAccessNode, pascal::ForStmtNode, pascal::FuncCallNode, pascal::FuncDeclNode, pascal::GotoStmtNode, pascal::IfStmtNode, pascal::LabelStmtNode, pascal::NilNode, pascal::NumberNode, pascal::ParameterNode, pascal::PointerDerefNode, pascal::PointerTypeNode, pascal::ProcCallNode, pascal::ProcDeclNode, pascal::ProgramNode, pascal::RecordDeclarationNode, pascal::RecordTypeNode, pascal::RepeatStmtNode, pascal::SetLiteralNode, pascal::SetTypeNode, pascal::SimpleTypeNode, pascal::StringNode, pascal::TypeAliasNode, pascal::TypeDeclNode, pascal::UnaryOpNode, pascal::UnitNode, pascal::VarDeclNode, pascal::VariableNode, pascal::WhileStmtNode, and pascal::WithStmtNode.
Referenced by print().
|
private |
source line number where this node originated
Definition at line 27 of file ast.hpp.
Referenced by getLineNumber(), and setLineNumber().