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
255 OROP, ANDOP, EQOP, NEQOP, LTOP, LEOP, GEOP, GTOP,
256 ADDOP, SUBOP, MULOP, DIVOP, MODOP
struct ASTNode * location
Left-hand side of assignment.
Definition: ast.h:176
AST literal expression structure.
Definition: ast.h:362
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:344
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:310
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:345
int ASTNode_get_int_attribute(ASTNode *node, const char *key)
Retrieve a particular integer attribute from a node.
Definition: ast.c:133
struct ASTNode ASTNode
Main AST node structure.
AST unary operation expression structure.
Definition: ast.h:307
struct ASTNode * next
Next node (if stored in a list)
Definition: ast.h:452
Main AST node structure.
Definition: ast.h:447
struct FuncCallNode FuncCallNode
AST function call expression 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:451
Linked list of struct ASTNode* elements.
Definition: ast.h:475
struct ASTNode * LiteralNode_new_string(const char *value, int source_line)
Allocate a new string literal expression AST node.
Definition: ast.c:368
Destructor dtor
Pointer to destructor function that should be called to deallocate the attribute value (should be NUL...
Definition: ast.h:407
char name[256]
Location/variable name.
Definition: ast.h:328
struct ASTNode * body
Function body block.
Definition: ast.h:140
struct NodeList * arguments
List of actual parameters/arguments.
Definition: ast.h:347
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 UnaryOpNode UnaryOpNode
AST unary operation expression structure.
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
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:403
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:329
void * value
Attribute value (integral value or pointer to heap)
Definition: ast.h:404
DecafType
Valid Decaf types.
Definition: common.h:66
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:327
struct ASTNode * right
Right operand expression.
Definition: ast.h:273
struct NodeList * variables
List of global variable declarations.
Definition: ast.h:73
int integer
Integer value (if type is INT)
Definition: ast.h:365
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:363
AST binary operation expression structure.
Definition: ast.h:270
struct ASTNode * LiteralNode_new_int(int value, int source_line)
Allocate a new integer literal expression AST node.
Definition: ast.c:352
NodeType type
Node type (discriminator/tag for the anonymous union)
Definition: ast.h:449
struct LocationNode LocationNode
AST location expression structure.
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:450
struct ConditionalNode ConditionalNode
AST conditional structure.
#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
struct Attribute Attribute
AST attribute (basically a key-value store for nodes)
bool boolean
Boolean value (if type is BOOL)
Definition: ast.h:366
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
const char * UnaryOpToString(UnaryOpType op)
Convert a UnaryOpType to a string.
Definition: ast.c:319
struct WhileLoopNode WhileLoopNode
AST while loop structure.
void dummy_print(void *, FILE *)
Fake "print" function that does nothing.
Definition: ast.c:3
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:405
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:254
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 ProgramNode ProgramNode
AST root structure.
AST block structure.
Definition: ast.h:159
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:309
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.
struct VarDeclNode VarDeclNode
AST variable structure.
const char * BinaryOpToString(BinaryOpType op)
Convert a BinaryOpType to a string.
Definition: ast.c:290
char name[256]
Function name.
Definition: ast.h:346
AST attribute (basically a key-value store for nodes)
Definition: ast.h:401
struct ReturnNode ReturnNode
AST return statement structure.
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
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 AssignmentNode AssignmentNode
AST assignment structure.
struct Parameter Parameter
AST parameter (used in function declarations)
struct ASTNode * left
Left operand expression.
Definition: ast.h:272
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:360
struct FuncDeclNode FuncDeclNode
AST function structure.
struct LiteralNode LiteralNode
AST literal expression structure.
struct ASTNode * BlockNode_new(int source_line)
Allocate a new block declaration AST node.
Definition: ast.c:250
struct BlockNode BlockNode
AST block structure.
struct ASTNode * LocationNode_new(const char *name, struct ASTNode *index, int source_line)
Allocate a new location expression AST node.
Definition: ast.c:336
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:292
struct Attribute * next
Next attribute (if stored in a list)
Definition: ast.h:410
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:328
void int_attr_print(void *, FILE *)
Simple "print" function that prints an attribute value as an integer.
Definition: ast.c:9