int i = 32; -> INT EQUALS SEMICOLON -> -> | LAMBDA -> UPPER_ALPHA_CHAR | LOWER_ALPHA_CHAR | NUMBER -> NUMBER -> NUMBER | LAMBDA typedef struct TEMP_LangVar = { ARC_String *name; void *data; } TEMP_LangVar; void *(* ARC_Parser_ConstantCallbackFn)(void **data, void *parentdata); defineIntLine ┌─────────────────── TEMP_LangVar var = { NULL, NULL } │ INT │ ┌───────────────── <- NULL │ │ int │ └───────────────── │ │ variable │ ┌───────────────── ARC_String_Create(&(var.name)); │ │ alphaChar │ │ ┌─────────────── ARC_String_Append(var.name, "i"); │ │ │ i │ │ └─────────────── │ │ │ │ variableBody │ │ ┌─────────────── │ │ │ LAMBDA │ │ └─────────────── │ └───────────────── │ │ EQUALS │ ┌───────────────── │ │ = │ └───────────────── │ │ value │ ┌───────────────── var.name = malloc(sizeof(int32_t)); │ │ NUMBER │ │ ┌─────────────── *(var.name) = 3 │ │ │ 3 │ │ └─────────────── │ │ │ │ valueBody │ │ ┌─────────────── │ │ │ NUMBER │ │ │ ┌───────────── *(var.name) = *var.name * 10 + 2 │ │ │ │ 2 │ │ │ └───────────── │ │ │ │ │ │ valueBody │ │ │ ┌───────────── │ │ │ │ LAMBDA │ │ │ └───────────── │ │ └─────────────── │ └───────────────── │ │ SEMICOLON │ ┌───────────────── │ │ ; │ └───────────────── └───────────────────