Go to the documentation of this file.
56 PROGRAM, VARDECL, FUNCDECL, BLOCK,
57 ASSIGNMENT, CONDITIONAL, WHILELOOP, RETURNSTMT, BREAKSTMT, CONTINUESTMT,
58 BINARYOP, UNARYOP, LOCATION, FUNCCALL, LITERAL
275 OROP, ANDOP, EQOP, NEQOP, LTOP, LEOP, GEOP, GTOP,
276 ADDOP, SUBOP, MULOP, DIVOP, MODOP
struct ASTNode * location
Left-hand side of assignment.
Definition: ast.h:180
AST literal expression structure.
Definition: ast.h:383
NodeType
AST node type tag.
Definition: ast.h:55
AST parameter (used in function declarations)
Definition: ast.h:114
AST function structure.
Definition: ast.h:138
struct ASTNode * if_block
Block to be executed if the condition is true.
Definition: ast.h:201
struct ASTNode * BinaryOpNode_new(BinaryOpType operator, struct ASTNode *left, struct ASTNode *right, int source_line)
Allocate a new binary operation expression AST node.
Definition: ast.c:320
struct ProgramNode ProgramNode
AST root structure.
struct ASTNode * AssignmentNode_new(struct ASTNode *location, struct ASTNode *value, int source_line)
Allocate a new assignment statement AST node.
Definition: ast.c:258
void dummy_free(void *)
Fake "free" function that does nothing.
Definition: ast.c:14
DecafType return_type
Function return type.
Definition: ast.h:140
AST function call expression structure.
Definition: ast.h:365
int ASTNode_get_int_attribute(ASTNode *node, const char *key)
Retrieve a particular integer attribute from a node.
Definition: ast.c:133
struct ASTNode * FuncCallNode_new(const char *name, struct NodeList *args, int source_line)
Allocate a new function call expression AST node.
Definition: ast.c:354
struct BlockNode BlockNode
AST block structure.
struct LocationNode LocationNode
AST location expression structure.
AST unary operation expression structure.
Definition: ast.h:327
struct ASTNode * next
Next node (if stored in a list)
Definition: ast.h:475
Main AST node structure.
Definition: ast.h:470
struct WhileLoopNode WhileLoopNode
AST while loop structure.
struct ASTNode * FuncDeclNode_new(const char *name, DecafType return_type, ParameterList *parameters, struct ASTNode *body, int source_line)
Allocate a new function declaration AST node.
Definition: ast.c:240
Attribute * attributes
Attribute list (not a formal list because of the provided accessor methods)
Definition: ast.h:474
Linked list of struct ASTNode* elements.
Definition: ast.h:498
struct LiteralNode LiteralNode
AST literal expression structure.
struct ASTNode * LiteralNode_new_string(const char *value, int source_line)
Allocate a new string literal expression AST node.
Definition: ast.c:378
Destructor dtor
Pointer to destructor function that should be called to deallocate the attribute value (should be NUL...
Definition: ast.h:428
struct ASTNode * ContinueNode_new(int source_line)
Allocate a new continue statement AST node.
Definition: ast.c:295
char name[256]
Location/variable name.
Definition: ast.h:348
struct ASTNode * body
Function body block.
Definition: ast.h:142
struct NodeList * arguments
List of actual parameters/arguments.
Definition: ast.h:367
struct ASTNode * BlockNode_new(struct NodeList *vars, struct NodeList *stmts, int source_line)
Allocate a new block declaration AST node.
Definition: ast.c:250
void * ASTNode_get_attribute(ASTNode *node, const char *key)
Retrieve a particular attribute from a node.
Definition: ast.c:138
char name[256]
Function name.
Definition: ast.h:139
char name[256]
Variable name.
Definition: ast.h:92
struct ASTNode * WhileLoopNode_new(struct ASTNode *condition, struct ASTNode *body, int source_line)
Allocate a new while loop statement AST node.
Definition: ast.c:275
struct VarDeclNode VarDeclNode
AST variable structure.
AST return statement structure.
Definition: ast.h:242
char name[256]
Parameter formal name.
Definition: ast.h:115
struct ASTNode * condition
Guard condition (expression)
Definition: ast.h:223
const char * key
Attribute key.
Definition: ast.h:424
struct ASTNode * condition
Guard condition (expression)
Definition: ast.h:200
AST conditional structure.
Definition: ast.h:199
struct ASTNode * ProgramNode_new(struct NodeList *vars, struct NodeList *funcs)
Allocate a new program AST node.
Definition: ast.c:222
struct ASTNode * index
Index expression (can be NULL for non-array locations)
Definition: ast.h:349
void * value
Attribute value (integral value or pointer to heap)
Definition: ast.h:425
DecafType
Valid Decaf types.
Definition: common.h:66
struct UnaryOpNode UnaryOpNode
AST unary operation expression structure.
struct ASTNode * body
Block to be executed while the condition is true.
Definition: ast.h:224
struct ASTNode * ReturnNode_new(struct ASTNode *value, int source_line)
Allocate a new return statement AST node.
Definition: ast.c:283
AST location expression structure.
Definition: ast.h:347
struct ASTNode * right
Right operand expression.
Definition: ast.h:293
struct NodeList * variables
List of global variable declarations.
Definition: ast.h:73
int integer
Integer value (if type is INT)
Definition: ast.h:386
struct ReturnNode ReturnNode
AST return statement structure.
void ASTNode_set_attribute(ASTNode *node, const char *key, void *value, Destructor dtor)
Add or change an attribute for an AST node.
Definition: ast.c:70
const char * NodeType_to_string(NodeType type)
Return a string representation of a node type.
Definition: ast.c:19
DecafType type
Literal type (discriminator/tag for the anonymous union)
Definition: ast.h:384
AST binary operation expression structure.
Definition: ast.h:290
struct ASTNode * LiteralNode_new_int(int value, int source_line)
Allocate a new integer literal expression AST node.
Definition: ast.c:362
NodeType type
Node type (discriminator/tag for the anonymous union)
Definition: ast.h:472
void(* AttributeValueDOTPrinter)(void *, FILE *)
Function pointer used to store references to custom DOT output routines.
Definition: ast.h:18
int source_line
Source code line number.
Definition: ast.h:473
#define DECL_LIST_TYPE(NAME, ELEMTYPE)
Declare a singly-linked list structure of the given type.
Definition: common.h:132
struct NodeList * statements
List of statements in the block.
Definition: ast.h:163
ParameterList * parameters
List of formal parameters.
Definition: ast.h:141
AST assignment structure.
Definition: ast.h:179
bool boolean
Boolean value (if type is BOOL)
Definition: ast.h:387
Linked list of struct Parameter* elements.
Definition: ast.h:123
struct ASTNode * value
Return value (can be NULL for void returns)
Definition: ast.h:243
struct Parameter * next
Pointer to next parameter (if in a list)
Definition: ast.h:117
struct NodeList * functions
List of function declarations.
Definition: ast.h:74
struct NodeList * variables
List of local variable declarations in the block.
Definition: ast.h:162
struct AssignmentNode AssignmentNode
AST assignment structure.
const char * UnaryOpToString(UnaryOpType op)
Convert a UnaryOpType to a string.
Definition: ast.c:329
void dummy_print(void *, FILE *)
Fake "print" function that does nothing.
Definition: ast.c:3
struct ConditionalNode ConditionalNode
AST conditional structure.
struct ASTNode * else_block
Block to be executed if the condition is false (can be NULL if there is no else-block)
Definition: ast.h:202
void ASTNode_set_printable_attribute(ASTNode *node, const char *key, void *value, AttributeValueDOTPrinter dot_printer, Destructor dtor)
Add or change a printable attribute for an AST node.
Definition: ast.c:80
AttributeValueDOTPrinter dot_printer
Pointer to DOT-printing function (can be NULL if not printable)
Definition: ast.h:426
bool is_array
True if the variable is an array, false if it's a scalar.
Definition: ast.h:94
BinaryOpType
Binary operator.
Definition: ast.h:274
bool ASTNode_has_attribute(ASTNode *node, const char *key)
Check to see if a node has a particular attribute.
Definition: ast.c:120
struct BinaryOpNode BinaryOpNode
AST binary operation expression structure.
ASTNode * ASTNode_new(NodeType type, int line)
Allocate a new AST node.
Definition: ast.c:59
AST variable structure.
Definition: ast.h:91
#define MAX_LINE_LEN
Maximum length (in characters) of any single line of input.
Definition: common.h:42
struct Attribute Attribute
AST attribute (basically a key-value store for nodes)
AST block structure.
Definition: ast.h:161
struct ASTNode ASTNode
Main AST node structure.
struct ASTNode * VarDeclNode_new(const char *name, DecafType type, bool is_array, int array_length, int source_line)
Allocate a new variable declaration AST node.
Definition: ast.c:230
struct ASTNode * child
Child operand expression.
Definition: ast.h:329
AST while loop structure.
Definition: ast.h:222
DecafType type
Parameter type.
Definition: ast.h:116
Includes, constants, declarations, and macros used across the compiler.
const char * BinaryOpToString(BinaryOpType op)
Convert a BinaryOpType to a string.
Definition: ast.c:300
char name[256]
Function name.
Definition: ast.h:366
AST attribute (basically a key-value store for nodes)
Definition: ast.h:422
int array_length
Length of array (should be 1 if not an array)
Definition: ast.h:95
#define MAX_ID_LEN
Maximum length (in characters) of any identifier.
Definition: common.h:57
struct ASTNode * BreakNode_new(int source_line)
Allocate a new break statement AST node.
Definition: ast.c:290
void ASTNode_set_int_attribute(ASTNode *node, const char *key, int value)
Add or change an integer attribute for an AST node.
Definition: ast.c:75
void ParameterList_add_new(ParameterList *list, const char *name, DecafType type)
Allocate and add a new parameter to a list of parameters.
Definition: ast.c:50
struct FuncCallNode FuncCallNode
AST function call expression structure.
struct ASTNode * left
Left operand expression.
Definition: ast.h:292
struct ASTNode * ConditionalNode_new(struct ASTNode *condition, struct ASTNode *if_block, struct ASTNode *else_block, int source_line)
Allocate a new conditional statement AST node.
Definition: ast.c:266
struct ASTNode * LiteralNode_new_bool(bool value, int source_line)
Allocate a new boolean literal expression AST node.
Definition: ast.c:370
struct FuncDeclNode FuncDeclNode
AST function structure.
struct ASTNode * LocationNode_new(const char *name, struct ASTNode *index, int source_line)
Allocate a new location expression AST node.
Definition: ast.c:346
struct Parameter Parameter
AST parameter (used in function declarations)
AST root structure.
Definition: ast.h:72
void ASTNode_free(ASTNode *node)
Deallocate an AST node structure.
Definition: ast.c:152
void(* Destructor)(void *)
Function pointer used to store references to custom "free" routines.
Definition: ast.h:23
UnaryOpType
Unary operator.
Definition: ast.h:312
struct Attribute * next
Next attribute (if stored in a list)
Definition: ast.h:431
struct ASTNode * value
Right-hand side of assignment.
Definition: ast.h:181
DecafType type
Variable type.
Definition: ast.h:93
struct ASTNode * UnaryOpNode_new(UnaryOpType operator, struct ASTNode *child, int source_line)
Allocate a new unary operation expression AST node.
Definition: ast.c:338
void int_attr_print(void *, FILE *)
Simple "print" function that prints an attribute value as an integer.
Definition: ast.c:9