|
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) |
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:
1.8.16