+list:
+ '(' listtokens ')' { $$ = $2; }
+ ;
+
+listtokens:
+ listtokens listtoken { ParseToken *nt = g_new(ParseToken, 1);
+ nt->type = t.type;
+ nt->data = t.data;
+ $$ = g_slist_append($1, nt);
+ }
+ | token { ParseToken *nt = g_new(ParseToken, 1);
+ nt->type = t.type;
+ nt->data = t.data;
+ $$ = g_slist_append(NULL, nt);
+ }
+ ;
+
+listtoken:
+ REAL { t.type = TOKEN_REAL; t.data.real = $1; }
+ | INTEGER { t.type = TOKEN_INTEGER; t.data.integer = $1; }
+ | STRING { t.type = TOKEN_STRING; t.data.string = $1; }
+ | IDENTIFIER { t.type = TOKEN_IDENTIFIER; t.data.identifier = $1; }
+ | BOOL { t.type = TOKEN_BOOL; t.data.bool = $1; }
+ | list { t.type = TOKEN_LIST; t.data.list = $1; }
+ | '{' { t.type = $1; t.data.character = $1; }
+ | '}' { t.type = $1; t.data.character = $1; }
+ | '=' { t.type = $1; t.data.character = $1; }
+ | ',' { t.type = $1; t.data.character = $1; }
+ ;
+
+