Ответ 1
Вы всегда можете использовать приложение А стандарта C11. Свободно доступный проект стандарта будет работать в ваших целях, http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf.
Я работаю над парсером для C. Я пытаюсь найти список всех контекстно-свободных дифференцировок для C. В идеале это было бы в BNF или аналогичном. Я уверен, что такая вещь есть, но googling вокруг не дал мне многого.
Чтение исходного кода для существующих синтаксических анализаторов/компиляторов оказалось гораздо более запутанным, чем полезным, так как большинство из них, которые я нашел, гораздо более амбициозны и сложны, чем тот, который я создаю.
Вы всегда можете использовать приложение А стандарта C11. Свободно доступный проект стандарта будет работать в ваших целях, http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf.
Это грамматика ANSI-C, обновленная до стандарта C11. Должен служить вашей цели.
В грамматике ANSI для C99 есть ошибка во внешней декларации: определение функции.
Вы можете использовать его, а также Приложение A.13 Кернигана - язык программирования C, выпуск ANSI C.