ParsingTable

Node Name Node Type # Children Children Parent
Var Decl List NODETYPE_VAR_DECL_LIST 0:N Var Decl Global, Block
Var Decl NODETYPE_VAR_DECL 3-4 0 = Const Value 1 = Type 2 = Id 3 = Expr Var Decl List
Func Decl NODETYPE_FUNC_DECL 3 - 4 0 = Type 1 = Id 2 = Param List 3 = Block, (If an actual function is defined and not simply a declaration) Global
Param List NODETYPE_FUNC_PARAMLIST 0-N (even) 0 = Type 1 = Id . . . N - 1 = Type N = Id Func Decl
Arg List NODETYPE_FUNC_ARGLIST 0-N 0-N: Expr Call Expr
Type NODETYPE_TYPE 1-N 0: Type Keyword 1-N: Pointer
Group Type Keyword
Bool NODETYPE_TYPE_BOOL, 0 None Type
Int NODETYPE_TYPE_INT 0 None Type
Char NODETYPE_TYPE_CHAR 0 None Type
Struct NODETYPE_TYPE_STRUCT 1 0 = Id Type
End Group
Pointer NODETYPE_TYPE_POINTER 0 None Type
Group Const Value
Const NODETYPE_CONST 0 None Var Decl
Not Const NODETYPE_NOT_CONST 0 None Var Decl
End Group
Struct Def NODETYPE_STRUCT_DEF 1-N 0: Id 1-N: Var Decl (No initialization allowed) Global
Group Expr (Follows Precedence. All children are listed as Expr however all children must actually be of equal or greater precedence. with Id having the highest precedence.)
Add NODETYPE_EXPR_BINARY_ADD 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Sub NODETYPE_EXPR_BINARY_SUB 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Mult NODETYPE_EXPR_BINARY_MULT 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Div NODETYPE_EXPR_BINARY_DIV 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Equal NODETYPE_EXPR_BINARY_EQUAL 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Not Equal NODETYPE_EXPR_BINARY_NOTEQUAL 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Greater Equal NODETYPE_EXPR_BINARY_GREATEREQUAL 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Greater NODETYPE_EXPR_BINARY_GREATER 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Less Equal NODETYPE_EXPR_BINARY_LESSEQUAL 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Less NODETYPE_EXPR_BINARY_LESS 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Logical And NODETYPE_EXPR_BINARY_ANDAND 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Logical Or NODETYPE_EXPR_BINARY_OROR 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Bitwise And NODETYPE_EXPR_BINARY_AND 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Bitwise Or NODETYPE_EXPR_BINARY_OR 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Bitwise Xor NODETYPE_EXPR_BINARY_XOR 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Prefix ++ NODETYPE_EXPR_PREFIX_PLUSPLUS 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Prefix -- NODETYPE_EXPR_PREFIX_MINUSMINUS 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Negate NODETYPE_EXPR_PREFIX_NEGATE 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Address NODETYPE_EXPR_PREFIX_ADDRESS 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Dereference NODETYPE_EXPR_PREFIX_DEREFERENCE 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Logical Not NODETYPE_EXPR_PREFIX_NOTNOT 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Bitwise Not NODETYPE_EXPR_PREFIX_NOT 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Dot NODETYPE_EXPR_STRUCT_DOT 2 0: Expr 1: Id Expr, Block, Arg List, If Else, For, Return, Var Decl
Arrow NODETYPE_EXPR_STRUCT_ARROW 2 0: Expr 1: Id Expr, Block, Arg List, If Else, For, Return, Var Decl
Postfix ++ NODETYPE_EXPR_POSTFIX_PLUSPLUS 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Postfix -- NODETYPE_EXPR_POSTFIX_MINUSMINUS 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Call NODETYPE_EXPR_CALL 2 0: ID 1: Arg List Expr, Block, Arg List, If Else, For, Return, Var Decl
Cast NODETYPE_EXPR_CAST 2 0: Type 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Assign NODETYPE_EXPR_ASSIGN 2 0: Expr 1: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Pren NODETYPE_EXPR_PREN 1 0: Expr Expr, Block, Arg List, If Else, For, Return, Var Decl
Id NODETYPE_ID 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl, Struct, Struct Def, Func Decl, Param List,
Integer NODETYPE_CONSTANT_INTEGER 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
String NODETYPE_CONSTANT_STRING 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
Character NODETYPE_CONSTANT_CHARACTER 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
True NODETYPE_CONSTANT_TRUE 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
False NODETYPE_CONSTANT_FALSE 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
Null NODETYPE_CONSTANT_NULL 0 None Expr, Block, Arg List, If Else, For, Return, Var Decl
End Group
Global NODETYPE_GLOBAL 0-N 0-N: Struct Def, Func Decl, Var Decl List None
Block NODETYPE_BLOCK 0-N 0-N: Continue, Break, For, If Else, Var Decl List, Expr Func Decl (if it declares a function), If Else, For
Break NODETYPE_BREAK 0 None Block
Continue NODETYPE_CONTINUE 0 None Block
Return NODETYPE_RETURN 1 0: Expr Block
Error NODETYPE_ERR 0 None Any. Is placed in the tree when an error has occurred.
If Else NODETYPE_CONTROL_IF_ELSE, 2-3 0 = Expr (Condition) 1 = Block (If Body) 2 = Block, (Else Body, if it is present) Block
For NODETYPE_CONTROL_FOR 4 0-2: Expr (Loop conditions should be replaced with a dummy Expr if Expr is empty) 3: Block (Body) Block