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
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 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 ASTNode * ProgramNode_new(struct NodeList *vars, struct NodeList *funcs)
Allocate a new program AST node.
Definition ast.c:222
const char * UnaryOpToString(UnaryOpType op)
Convert a UnaryOpType to a string.
Definition ast.c:329
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
struct ASTNode * ReturnNode_new(struct ASTNode *value, int source_line)
Allocate a new return statement AST node.
Definition ast.c:283
BinaryOpType
Binary operator.
Definition ast.h:274
void(* AttributeValueDOTPrinter)(void *, FILE *)
Function pointer used to store references to custom DOT output routines.
Definition ast.h:18
ASTNode * ASTNode_new(NodeType type, int line)
Allocate a new AST node.
Definition ast.c:59
void ASTNode_free(ASTNode *node)
Deallocate an AST node structure.
Definition ast.c:152
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
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 dummy_print(void *, FILE *)
Fake "print" function that does nothing.
Definition ast.c:3
void dummy_free(void *)
Fake "free" function that does nothing.
Definition ast.c:14
UnaryOpType
Unary operator.
Definition ast.h:312
const char * NodeType_to_string(NodeType type)
Return a string representation of a node type.
Definition ast.c:19
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 ASTNode * UnaryOpNode_new(UnaryOpType operator, struct ASTNode *child, int source_line)
Allocate a new unary operation expression AST node.
Definition ast.c:338
struct ASTNode * ContinueNode_new(int source_line)
Allocate a new continue statement AST node.
Definition ast.c:295
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 * LiteralNode_new_bool(bool value, int source_line)
Allocate a new boolean literal expression AST node.
Definition ast.c:370
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
NodeType
AST node type tag.
Definition ast.h:55
struct ASTNode * LocationNode_new(const char *name, struct ASTNode *index, int source_line)
Allocate a new location expression AST node.
Definition ast.c:346
void int_attr_print(void *, FILE *)
Simple "print" function that prints an attribute value as an integer.
Definition ast.c:9
struct ASTNode * BreakNode_new(int source_line)
Allocate a new break statement AST node.
Definition ast.c:290
struct ASTNode * AssignmentNode_new(struct ASTNode *location, struct ASTNode *value, int source_line)
Allocate a new assignment statement AST node.
Definition ast.c:258
struct ASTNode * LiteralNode_new_string(const char *value, int source_line)
Allocate a new string literal expression AST node.
Definition ast.c:378
int ASTNode_get_int_attribute(ASTNode *node, const char *key)
Retrieve a particular integer attribute from a node.
Definition ast.c:133
const char * BinaryOpToString(BinaryOpType op)
Convert a BinaryOpType to a string.
Definition ast.c:300
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
void(* Destructor)(void *)
Function pointer used to store references to custom "free" routines.
Definition ast.h:23
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
struct ASTNode * LiteralNode_new_int(int value, int source_line)
Allocate a new integer literal expression AST node.
Definition ast.c:362
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
bool ASTNode_has_attribute(ASTNode *node, const char *key)
Check to see if a node has a particular attribute.
Definition ast.c:120
Includes, constants, declarations, and macros used across the compiler.
#define MAX_LINE_LEN
Maximum length (in characters) of any single line of input.
Definition common.h:42
#define DECL_LIST_TYPE(NAME, ELEMTYPE)
Declare a singly-linked list structure of the given type.
Definition common.h:132
#define MAX_ID_LEN
Maximum length (in characters) of any identifier.
Definition common.h:57
DecafType
Valid Decaf types.
Definition common.h:66
Main AST node structure.
Definition ast.h:471
struct ASTNode * next
Next node (if stored in a list)
Definition ast.h:475
NodeType type
Node type (discriminator/tag for the anonymous union)
Definition ast.h:472
int source_line
Source code line number.
Definition ast.h:473
Attribute * attributes
Attribute list (not a formal list because of the provided accessor methods)
Definition ast.h:474
AST assignment structure.
Definition ast.h:179
struct ASTNode * location
Left-hand side of assignment.
Definition ast.h:180
struct ASTNode * value
Right-hand side of assignment.
Definition ast.h:181
AST attribute (basically a key-value store for nodes)
Definition ast.h:423
struct Attribute * next
Next attribute (if stored in a list)
Definition ast.h:431
const char * key
Attribute key.
Definition ast.h:424
AttributeValueDOTPrinter dot_printer
Pointer to DOT-printing function (can be NULL if not printable)
Definition ast.h:426
void * value
Attribute value (integral value or pointer to heap)
Definition ast.h:425
Destructor dtor
Pointer to destructor function that should be called to deallocate the attribute value (should be NUL...
Definition ast.h:428
AST binary operation expression structure.
Definition ast.h:290
struct ASTNode * left
Left operand expression.
Definition ast.h:292
struct ASTNode * right
Right operand expression.
Definition ast.h:293
AST block structure.
Definition ast.h:161
struct NodeList * variables
List of local variable declarations in the block.
Definition ast.h:162
struct NodeList * statements
List of statements in the block.
Definition ast.h:163
AST conditional structure.
Definition ast.h:199
struct ASTNode * condition
Guard condition (expression)
Definition ast.h:200
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
struct ASTNode * if_block
Block to be executed if the condition is true.
Definition ast.h:201
AST function call expression structure.
Definition ast.h:365
struct NodeList * arguments
List of actual parameters/arguments.
Definition ast.h:367
char name[256]
Function name.
Definition ast.h:366
AST function structure.
Definition ast.h:138
DecafType return_type
Function return type.
Definition ast.h:140
ParameterList * parameters
List of formal parameters.
Definition ast.h:141
char name[256]
Function name.
Definition ast.h:139
struct ASTNode * body
Function body block.
Definition ast.h:142
AST literal expression structure.
Definition ast.h:383
DecafType type
Literal type (discriminator/tag for the anonymous union)
Definition ast.h:384
bool boolean
Boolean value (if type is BOOL)
Definition ast.h:387
int integer
Integer value (if type is INT)
Definition ast.h:386
AST location expression structure.
Definition ast.h:347
struct ASTNode * index
Index expression (can be NULL for non-array locations)
Definition ast.h:349
char name[256]
Location/variable name.
Definition ast.h:348
Linked list of struct ASTNode* elements.
Definition ast.h:498
AST parameter (used in function declarations)
Definition ast.h:114
char name[256]
Parameter formal name.
Definition ast.h:115
struct Parameter * next
Pointer to next parameter (if in a list)
Definition ast.h:117
DecafType type
Parameter type.
Definition ast.h:116
Linked list of struct Parameter* elements.
Definition ast.h:123
AST root structure.
Definition ast.h:72
struct NodeList * variables
List of global variable declarations.
Definition ast.h:73
struct NodeList * functions
List of function declarations.
Definition ast.h:74
AST return statement structure.
Definition ast.h:242
struct ASTNode * value
Return value (can be NULL for void returns)
Definition ast.h:243
AST unary operation expression structure.
Definition ast.h:327
struct ASTNode * child
Child operand expression.
Definition ast.h:329
AST variable structure.
Definition ast.h:91
bool is_array
True if the variable is an array, false if it's a scalar.
Definition ast.h:94
int array_length
Length of array (should be 1 if not an array)
Definition ast.h:95
char name[256]
Variable name.
Definition ast.h:92
DecafType type
Variable type.
Definition ast.h:93
AST while loop structure.
Definition ast.h:222
struct ASTNode * body
Block to be executed while the condition is true.
Definition ast.h:224
struct ASTNode * condition
Guard condition (expression)
Definition ast.h:223