Язык Си


A13. Грамматика


Ниже приведены грамматические правила, которые мы уже рассматривали в данном приложении. Они имеют то же содержание, но даны в ином порядке.

Здесь не приводятся определения следующих символов-терминов: целая-константа, символьная-константа, константа-с-плавающей-точкой, идентификатор, строка и константа-перечисление. Слова, набранные обычным латинским шрифтом (не курсивом), и знаки рассматриваются как символы-термины и используются точно в том виде, как записаны. Данную грамматику можно механически трансформировать в текст, понятный системе автоматической генерации грамматического распознавателя. Для этого помимо добавления некоторых синтаксических пометок, предназначенных для указания альтернативных продукций, потребуется расшифровка конструкции со словами "один из" и дублирование каждой продукции, использующей символ с индексом необ., причем один вариант продукции должен быть написан с этим символом, а другой - без него. С одним изменением, а именно - удалением продукции typedef-имя:идентификатор и объявлением typedef-имени символом-термином, данная грамматика будет понятна генератору грамматического распознавателя YACC. Ей присуще лишь одно противоречие, вызываемое неоднозначностью конструкции if-else.

единица–трансляции: внешнее-объявление

единица-трансляции внешнее-объявление

внешнее-объявление: определение-функции

объявление

определение функции: спецификаторы-объявлениянеоб объявитель

список-объявленийнеоб составная-инструкция

объявление: спецификаторы-объявления список-инициализаторов-объявителейнеоб

список-объявлений: объявление

список-объявлений объявление

спецификаторы-объявления: спецификатор-класса-памяти спецификаторы-объявлениянеоб

спецификатор-типа спецификаторы-объявлениянеоб

квалификатор-типа спецификаторы-объявлениянеоб

спецификатор-класса-памяти: один из auto register static extern typedef

спецификатор-типа: один из void char short int long float double signed unsigned спецификатор-структуры-или-объединения




- Начало -  - Назад -  - Вперед -