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)