#pragma once enum { GROUP_NONE = 0, GROUP_SCOPE = 's', GROUP_ATOM = 'a', GROUP_FUNCTION = 'f', GROUP_EXPRESSION = 'x', GROUP_FUNCALL = 'e', GROUP_ASSIGN = '=', GROUP_LET = 'l', GROUP_DEREF = 'd', GROUP_RETURN = 'r', GROUP_IF = 'i', GROUP_ELSE = 'o', GROUP_WHILE = 'w', }; struct Token; typedef struct { unsigned int type; struct Token *tokens; struct Token *scope; } Group; struct Token *group_create(struct Token **l, struct Token *b, struct Token *e); void group_extract(struct Token **list, struct Token *group); int group_scope(struct Token **list); int group_funcall(struct Token **list); int group_deref(struct Token **list); int group_atom(struct Token **list);