Decaf Compiler
|
Main AST node structure. More...
#include <ast.h>
Public Attributes | |
NodeType | type |
Node type (discriminator/tag for the anonymous union) | |
int | source_line |
Source code line number. | |
Attribute * | attributes |
Attribute list (not a formal list because of the provided accessor methods) | |
struct ASTNode * | next |
Next node (if stored in a list) | |
union { | |
struct ProgramNode program | |
struct VarDeclNode vardecl | |
struct FuncDeclNode funcdecl | |
struct BlockNode block | |
struct AssignmentNode assignment | |
struct ConditionalNode conditional | |
struct WhileLoopNode whileloop | |
struct ReturnNode funcreturn | |
struct BinaryOpNode binaryop | |
struct UnaryOpNode unaryop | |
struct LocationNode location | |
struct FuncCallNode funccall | |
struct LiteralNode literal | |
}; | |
Main AST node structure.
Provides some basic definitions used across many nodes, such as source code info and attribute management. Storage of type-specific node data is managed using a tagged union of the other *Node structures declared earlier in this file.
AST nodes are designed to be semi-mutable even after parsing by means of the attributes
key-value mapping that is stored in every node. List of potential attributes (not exhaustive, and most are irrelevant to Project 2):
Key | Description |
---|---|
parent | Uptree parent ASTNode reference |
depth | Tree depth (int ) |
symbolTable | Symbol table reference (only in program, function, and block nodes) |
type | DecafType of node (only in expression nodes) |
staticSize | Size (in bytes as int ) of global variables (only in program node) |
localSize | Size (in bytes as int ) of local variables (only in function nodes) |
code | ILOC instructions generated from the subtree rooted at this node |
reg | Register storing the result of the expression rooted at this node (only in expression nodes) |
Generally, the node-type-specific allocators (e.g., ProgramNode_new) should be used to ensure that all of the node-specific data members are initialized correctly. Node structures must be explicitly freed using ASTNode_free.
Methods: