+static bool tok_take_expr(struct parse_state *ps, const char *term)
+{
+ while (!tok_is(&ps->toks, term)) {
+ if (tok_take_if(&ps->toks, "(")) {
+ if (!tok_take_expr(ps, ")"))
+ return false;
+ } else if (tok_take_if(&ps->toks, "[")) {
+ if (!tok_take_expr(ps, "]"))
+ return false;
+ } else if (!tok_take(&ps->toks))
+ return false;
+ }
+ return tok_take(&ps->toks);
+}
+