Ambigüedad gramatical C11 entre el especificador de tipo atómico y el calificador

Estoy tratando de escribir una gramática lex / yacc para C11 basada en N1570. La mayor parte de mi gramática se copia textualmente del resumen de la sintaxis informativa, pero surgieron algunos conflictos yacc. He logrado resolverlos todos excepto uno: parece haber cierta ambigüedad entre cuándo se usa '_Atomic' como especificador de tipo y cuando se usa como calificador de tipo.

En la forma del especificador, _Atomic es seguido inmediatamente por paréntesis, así que asumo que tiene algo que ver con la poca sintaxis de C que permite que los declaradores estén entre paréntesis, permitiendo así que los paréntesis sigan inmediatamente a un calificador. Pero mi gramática ya sabe cómo diferenciar los nombres de typedef de otros identificadores, así que yacc debería saber la diferencia, ¿no es así?

Por mi vida, no puedo pensar en un caso en el que sería realmente ambiguo.

Dudo que ayude, pero aquí está la salida de estado relevante que obtengo cuando uso la marca -v de yacc. "ATOMIC" es obviamente el nombre de mi token para "_Atomic"

state 23

  152 atomic_type_specifier: ATOMIC . '(' type_name ')'
  156 type_qualifier: ATOMIC .

    '('  shift, and go to state 49

    '('       [reduce using rule 156 (type_qualifier)]
    $default  reduce using rule 156 (type_qualifier)

Respuestas a la pregunta(2)

Su respuesta a la pregunta