Язык программирования Си. Издание 3-е, исправленное — страница 60 из 69

инструкция

инструкция-выражение:

выражениенеоб;

составная-инструкция:

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

список-инструкций:

инструкция

список-инструкций инструкция

инструкция-выбора:

    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-строка текст