Create a type of tree nodes. Here is a type that is suitable for your interpreter.
typedef struct astnode { int kind; /* This tells which kind of expression this is. */ int mark; /* Used to mark nodes */ ... union { int intval; const char* strval; struct { struct ast* s1; struct ast* s2; struct ast* s3; } subtrees; } fields; } ASTNODE; typedef ASTNODE* AST;
If t has type AST, then t->kind is the kind of node. Normally, you would test that in a function that deals with trees.
See Assignment 3 for details on abstract syntax trees.