Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
A13. Грамматика
Ниже приведены грамматические правила, которые мы уже рассматривали в данном приложении. Они имеют то же содержание, но даны в ином порядке. Здесь не приводятся определения следующих символов-терминов: целая-константа, символьная-константа, константа-с-плавающей-точкой, идентификатор, строка и константа-перечисление. Слова, набранные обычным латинским шрифтом (не курсивом), и знаки рассматриваются как символы-термины и используются точно в том виде, как записаны. Данную грамматику можно механически трансформировать в текст, понятный системе автоматической генерации грамматического распознавателя. Для этого помимо добавления некоторых синтаксических пометок, предназначенных для указания альтернативных продукций, потребуется расшифровка конструкции со словами " один из" и дублирование каждой продукции, использующей символ с индексом необ., причем один вариант продукции должен быть написан с этим символом, а другой - без него. С одним изменением, а именно - удалением продукции typedef-имя: идентификатор и объявлением typedef-имени символом-термином, данная грамматика будет понятна генератору грамматического распознавателя YACC. Ей присуще лишь одно противоречие, вызываемое неоднозначностью конструкции if-else. единица–трансляции: внешнее-объявление единица-трансляции внешнее-объявление внешнее-объявление: определение-функции объявление определение функции: спецификаторы-объявлениянеоб объявитель список-объявленийнеоб составная-инструкция объявление: спецификаторы-объявления список-инициализаторов-объявителейнеоб список-объявлений: объявление список-объявлений объявление спецификаторы-объявления: спецификатор-класса-памяти спецификаторы-объявлениянеоб спецификатор-типа спецификаторы-объявлениянеоб квалификатор-типа спецификаторы-объявлениянеоб спецификатор-класса-памяти: один из auto register static extern typedef спецификатор-типа: один из void char short int long float double signed unsigned спецификатор-структуры-или-объединения спецификатор-перечисления typedef-имя квалификатор-типа: один из const volatile спецификатор-структуры-или-объединения: структуры-или-объединения-идентификаторнеоб { список-объявлений-структуры } структуры-или-объединения идентификатор структура-или-объединение: одно из struct union список-объявлений-структуры: объявление-структуры список-объявлений-структуры объявление-структуры список-объявителей-ииициализаторов: объявитель-инициализатор список-объявителей-инициализаторов, объявитель-инициализатор объявитель-инициализатор: объявитель объявитель = инициализатор объявление-структуры: список-спецификаторов-квалификаторов список-объявителей-структуры список-спецификаторов-квалификаторов: спецификатор-типа список-спецификаторов-квалификаторовнеоб квалификатор-типа список-спецификаторов-квалификаторовнеоб список-структуры-объявителей: структуры–объявитель список-структуры-объявителей, структуры-объявитель структуры-объявитель: объявитель объявительнеоб: константное-выражение спецификатор-перечисления: enum идентификаторнеоб { список-перечислителей } enum идентификатор список-перечислителей: перечислитель список-перечислителей перечислитель перечислитель: идентификатор указательнеоб собственно-объявитель собственно-объявитель: идентификатор (объявитель) собственно-объявитель [ константное-выражениенеоб ] собственно-объявитель (список-типов-параметров) собственно-объявитель (список-идентификаторовнеоб) указатель: * список~квалификаторов-типанеоб * список-квалификаторов-типанеоб указатель список-квалификаторов-типа: квалификатор-типа список-квалификаторов-типа квалификатор-типа список-типов-параметров: список-параметров список-параметров,... список-параметров: объявление-параметра список-параметров, объявление-параметра объявление-параметра: спецификаторы-объявления объявитель спецификаторы-объявления абстрактный-объявительнеоб список-идентификаторов: идентификатор список-идентификаторов, идентификатор инициализатор: выражение-присваивания { список-инициализаторов } { список-инициализаторов, } список-инициализаторов: инициализатор список-инициализаторов, инициализатор имя-типа: список-спецификаторое-квалификаторов абстрактный-объявительнеоб абстрактный-объявитель: указатель указательнеоб собственно-абстрактный-объявитель собственно-абстрактный-объявитель: (абстрактный-объявитель) собственно-абстрактный-объявительнеоб [ константное-выражениенеоб ] собственно-абстрактный-объявительнеоб (список-типов-параметровнеоб) typedef-имя: идентификатор инструкция: помеченная-инструкция инструкция–выражение составная-инструкция инструкция-выбора циклическая-инструкция инструкция-перехода помеченная-инструкция: идентификатор: инструкция case константное-выражение: инструкция default: инструкция инструкция-выражение: выражениенеоб; составная-инструкция: (список-объявленийнеоб список-инструкцийнеоб) список-инструкций: инструкция список-инструкций инструкция инструкция-выбора: if (выражение) инструкция if (выражение) инструкция else инструкция switch (выражение) инструкция циклическая-инструкция: while (выражение) инструкция do инструкция while (выражение) return выражениенеоб; выражение: выражение-присваивания выражение, выражение-присваивания выражение-присваивания: условное-выражение унарное-выражение оператор-присваивания выражение-присваивания оператор-присваивания: один из = *= /= %= += -= < < = > > = & = ^= |= условное-выражение: логическое-ИЛИ-выражение логическое-ИЛИ-выражение? выражение: условное-выражение константное-выражение: условное-выражение логическое-ИЛИ-выражение: логическое-И-выражение логическое-ИЛИ-выражение || логическое-И-выражение логическое-И-выражение: ИЛИ-выражение логическое-И-выражение & & ИЛИ-выражение ИЛИ-выражение: исключающее-ИЛИ-выражение ИЛИ-выражение | исключающее-ИЛИ-выражение исключающее-ИЛИ-выражение: И-выражение исключающее-ИЛИ-выражение ^ И-выражение И-выражение: выражение-равенства И-выражение & выражение-равенства выражение-равенства: выражение-отношения выражение-равенства == выражение-отношения выражение-равенства! = выражение-отношения выражение-отношения: сдвиговое-выражение выражение-отношения < сдвиговое-выражение выражение-отношения > сдвиговое-выражение выражение-отношения < = сдвиговое-выражение выражение-отношения > = сдвиговое-выражение сдвиговое-выражение: аддитивное-выражение сдвиговое-выражение > > аддитивное-выражение сдвиговое-выражение < < аддитивное-выражение аддитивное-выражение: мультипликативное-выражение аддитивное-выражение + мультипликативное-выражение аддитивное-выражение - мультипликативное-выражение мультипликативное-выражение: выражение-приведенное-к-типу мультипликативное-выражение * выражение-приведенное-к-типу мультипликативное-выражение / выражение-приведенное-к-типу мультипликативное-выражение % выражение-приведенное-к-типу выражение-приведенное-к-типу: унарное-выражение (имя-типа) выражение-приведенное-к-типу унарное-выражение: постфиксное –выражение ++ унарное-выражение -- унарное-выражение унарный-оператор выражение-приведенное-к-типу sizeof унарное-выражение sizeof(имя-типа) унарный-оператор: один из & * + - ~! постфиксное-выражение: первичное-выражение постфиксное-выражение [ выражение ] постфиксное-выражение (список-аргументов-выраженийнеоб) постфиксное-выражение, идентификатор постфиксное-выражение -> идентификатор постфиксное-выражение ++ постфиксное-выражение -- первичное -выражение: идентификатор константа строка (выражение) список-аргументов-выражений: выражение-присваивания список-аргументов-выражений, выражение-присваивания константа: целая-константа символьная-константа константа-с-плавающей-точкой константа-перечисление Ниже приводится грамматика языка препроцессора в виде перечня структур управляющих строк. Для механического получения программы грамматического разбора она не годится. Грамматика включает символ текст, который означает текст обычной программы, безусловные управляющие строки препроцессора и его законченные условные конструкции. управляющая-строка: #define идентификатор последовательность-лексем #define идентификатор (идентификатор,..., идентификатор) последовательность-лексем #undef идентификатор #include < имя-файла > #include " имя-файла " #include последовательность-лексем #line константа " идентификатор " #line константа #error последовательность-лексем необ #pragma последовательность-лексем необ # условная-конструкция-препроцессора условная-конструкция-препроцессора: if-строка текст elif-части else-часть необ #endif if-строка: #if константное-выражение #ifdef идентификатор #ifndef идентификатор elif-части: elif-строка текст elif-части необ elif-строка: #elif константное-выражение else-часть: else-строка текст else-строка: #else
|