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: