This document contains a list of suggested AST fields AstNode - Position (the location in the file for the construct) ProgramNode - list of DeclNodes (globals) VarDeclNode - TypeNode (variable type declared) - IDNode (variable name declared) FnDeclNode - TypeNode (return type) - IDNode (name of the function being declared) - list of FormalDeclNodes (formal parameters) - list of StmtNodes (the function body) AssignStmtNode - LocNode (the destination location) - ExpNode (the source expression) ReadStmtNode - LocNode (a file variable from which to read) - LocNode (a variable that will receive file data) WriteStmtNode - LocNode (a file variable to write) - ExpNode (the expression being written) OpenNode - LocNode (the file to open) - std::string (path to the file) CloseNode - LocNode (the file to close) PostDecStmtNode / PostIncStmtNode - LocNode (a location being being decremented) IfStmtNode - ExpNode (the condition being evaluated) - list of StmtNode (body of the if stmt) IfElseStmtNode - ExpNode (the condition being evaluated) - list of StmtNode (true branch of the if stmt) - list of StmtNode (false branch of the if stmt) WhileStmtNode - ExpNode (the condition being evaluated) - list of StmtNode (body of the loop) TernaryExpNode - ExpNode (the condition being evaluated) - ExpNode (the expression to assign if true) - ExpNode (the expression to assign if false) ReturnStmtNode - ExpNode (the expression being returned - could be null) CallStmtNode - CallExpNode (the underlying function call expression) CallExpNode - IDNode (the name of the function being called) - list of ExpNode (arguments) IDNode - std::string (the name of the identifier) BinaryExpNode - ExpNode (the lhs operand of the operation) - ExpNode (the rhs operand of the operation) PlusNode / MinusNode / etc (no extra fields needed beyond superclass) UnaryExpNode - ExpNode (the underlying expression) NotNode / NegNode (no extra fields needed beyond superclass) IntTypeNode / other primitive type nodes (no fields needed beyond superclass) FileTypeNode (no fields needed beyond superclass) IndexNode - IDNode (array being indexed) - ExpNode (index expression) Literal nodes - basic type holding the underlying literal value