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 |