Pattern matches one type of paren but not another

Maury Markowitz <[email protected]> Sun, 28 May 2023 14:12:10 -0400
Newsgroups gmane.comp.parsers.bison.general
Message-ID <[email protected]>
Following, sort of, some advice I received earlier I modified my bison by adding this:

open_bracket:
 '(' | '[';
close_bracket:
 ')' | ']’;

And then modified the original code thus:

variable:
  VARIABLE_NAME
  {
    variable_t *new = malloc(sizeof(*new));
    new->name = $1;
    new->subscripts = NULL;
    new->slicing = NULL;
    $$ = new;
}
|
 VARIABLE_NAME open_bracket exprlist close_bracket
 {
    variable_t *new = malloc(sizeof(*new));
    new->name = $1;
    new->subscripts = $3;
    new->slicing = NULL;
    $$ = new;
 }

This source code works:

130 DIM A$(26),G$(26),L$(1)

But this fails:

130 DIM A$[26],G$[26],L$[1]

In this case it falls though the first variable case, not the second, it is not treating the [ as an open. The open_bracket is the only place [ appears.

I assume I have screwed up the alternation?