#include <ast.hpp>
Base class for nodes of abstract syntax trees of module ALib Expressions. Note that AST objects (and their data) are allocated in a MonoAllocator and hence have empty destructors.
Public Types | |
| enum | Types { Literal, Identifier, Function, UnaryOp, BinaryOp, TernaryOp } |
Public Fields | |
| Types | NodeType |
| integer | Position |
Public Methods | |
| AST ()=delete | |
| AST (Types type, integer position) | |
| virtual | ~AST () |
| virtual void | Assemble (Program &program, MonoAllocator &allocator, AString &normalized)=0 |
| virtual AST * | Optimize (Normalization normalization)=0 |
|
delete |
Deleted default constructor.
|
pure virtual |
Recursively compiles nested nodes and invokes one of the add-methods of program for itself.
| program | The program to be compiled. | |
| allocator | An allocator usable for temporary objects. Its memory is invalid after the compilation process. | |
| [out] | normalized | The normalized string, built during recursive compilation of the AST. |
Implemented in ASTConditional, ASTBinaryOp, ASTUnaryOp, ASTFunction, ASTIdentifier, and ASTLiteral.
|
pure virtual |
Recursively walks through the tree and performs optimizations, dependent on given flags.
As of today, the only optimization performed in this AST itself is to combine nested unary '+' and '-' operators on literals.
| normalization | The compiler flags denoting the normalization settings. |
Implemented in ASTConditional, ASTBinaryOp, ASTUnaryOp, ASTFunction, ASTIdentifier, and ASTLiteral.