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
271 OROP, ANDOP, EQOP, NEQOP, LTOP, LEOP, GEOP, GTOP,
272 ADDOP, SUBOP, MULOP, DIVOP, MODOP
struct ASTNode * location
Left-hand side of assignment.
Definition: ast.h:176
AST literal expression structure.
Definition: ast.h:378
NodeType
AST node type tag.
Definition: ast.h:55
AST parameter (used in function declarations)
Definition: ast.h:112
AST function structure.
Definition: ast.h:136
struct ASTNode * if_block
Block to be executed if the condition is true.
Definition: ast.h:197
struct ASTNode * FuncCallNode_new(const char *name, int source_line)
Allocate a new function call expression AST node.
Definition: ast.c:354
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:138
AST function call expression structure.
Definition: ast.h:361
int ASTNode_get_int_attribute(ASTNode *node, const char *key)
Retrieve a particular integer attribute from a node.
Definition: ast.c:133
struct BlockNode BlockNode
AST block structure.
struct LocationNode LocationNode
AST location expression structure.
AST unary operation expression structure.
Definition: ast.h:323
struct ASTNode * next
Next node (if stored in a list)
Definition: ast.h:470
Main AST node structure.
Definition: ast.h:465
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:469
Linked list of struct ASTNode* elements.
Definition: ast.h:493
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:423
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:344
struct ASTNode * body
Function body block.
Definition: ast.h:140
struct NodeList * arguments
List of actual parameters/arguments.
Definition: ast.h:363
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:137
char name[256]
Variable name.
Definition: ast.h:90
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:238
char name[256]
Parameter formal name.
Definition: ast.h:113
struct ASTNode * condition
Guard condition (expression)
Definition: ast.h:219
const char * key
Attribute key.
Definition: ast.h:419
struct ASTNode * condition
Guard condition (expression)
Definition: ast.h:196
AST conditional structure.
Definition: ast.h:195
struct ASTNode * index
Index expression (can be NULL for non-array locations)
Definition: ast.h:345
void * value
Attribute value (integral value or pointer to heap)
Definition: ast.h:420
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:220
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:343
struct ASTNode * right
Right operand expression.
Definition: ast.h:289
struct NodeList * variables
List of global variable declarations.
Definition: ast.h:73
int integer
Integer value (if type is INT)
Definition: ast.h:381
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:379
AST binary operation expression structure.
Definition: ast.h:286
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:467
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:468
#define DECL_LIST_TYPE(NAME, ELEMTYPE)
Declare a singly-linked list structure of the given type.
Definition: common.h:122
struct NodeList * statements
List of statements in the block.
Definition: ast.h:161
struct ASTNode * ProgramNode_new()
Allocate a new program AST node.
Definition: ast.c:222
ParameterList * parameters
List of formal parameters.
Definition: ast.h:139
AST assignment structure.
Definition: ast.h:175
bool boolean
Boolean value (if type is BOOL)
Definition: ast.h:382
Linked list of struct Parameter* elements.
Definition: ast.h:121
struct ASTNode * value
Return value (can be NULL for void returns)
Definition: ast.h:239
struct Parameter * next
Pointer to next parameter (if in a list)
Definition: ast.h:115
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:160
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:198
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:421
bool is_array
True if the variable is an array, false if it's a scalar.
Definition: ast.h:92
BinaryOpType
Binary operator.
Definition: ast.h:270
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:89
#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:159
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:325
AST while loop structure.
Definition: ast.h:218
DecafType type
Parameter type.
Definition: ast.h:114
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:362
AST attribute (basically a key-value store for nodes)
Definition: ast.h:417
int array_length
Length of array (should be 1 if not an array)
Definition: ast.h:93
#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:288
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 ASTNode * BlockNode_new(int source_line)
Allocate a new block declaration AST node.
Definition: ast.c:250
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:308
struct Attribute * next
Next attribute (if stored in a list)
Definition: ast.h:426
struct ASTNode * value
Right-hand side of assignment.
Definition: ast.h:177
DecafType type
Variable type.
Definition: ast.h:91
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