C11 грамматическая неоднозначность между спецификатором типа _Atomic и классификатором

Я пытаюсь написать грамматику lex / yacc для C11 на основе N1570. Большая часть моей грамматики дословно скопирована из информативной сводки синтаксиса, но возникли некоторые конфликты yacc. Мне удалось разрешить все из них, кроме одного: кажется, существует некоторая двусмысленность между тем, когда «_Atomic» apos; используется в качестве спецификатора типа и когда он используется в качестве спецификатора типа.

В форме спецификатора за _Atomic сразу следуют круглые скобки, поэтому я предполагаю, что он имеет какое-то отношение к мало используемому синтаксису C, который позволяет деклараторам заключаться в круглые скобки, таким образом позволяя скобкам сразу следовать за классификатором. Но моя грамматика уже знает, как отличить имена typedef от других идентификаторов, поэтому yacc должен знать разницу, не так ли?

Я не могу на всю жизнь подумать о случае, когда это было бы на самом деле неоднозначно.

Я сомневаюсь, что это помогает, но вот соответствующий вывод состояния, который я получаю, когда использую флаг yacc-s. & Quot; АТОМНОЙ & Quot; очевидно, мое имя токена для "_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)

Ответы на вопрос(2)

Ваш ответ на вопрос