Си
Описание подготовлено Н. Скотниковой

Выражение = Первичное| "*" Выражение| "&" Выражение| "-" Выражение|
            "!" Выражение| "~" Выражение| "++" Адрес| "--" Адрес|
            Адрес "++"| Адрес "--"| SIZEOF Выражение| "(" ИмяТипа ")"
            Выражение| Выражение БинОп Выражение| Выражение "?" Выражение
            ":" Выражение| Адрес ПрисОп Выражение| Выражение "," Выражение.
Адрес = Выражение.
Первичное = Идентификатор| Константа| Строка| "(" Выражение ")"| Первичное
            [ "(" СписокВыражений ")"]| Первичное "[" Выражение "]"| Адрес
            "." Идентификатор| Первичное "->" Идентификатор.
БинОп = "*"| "/"| "%"| "+"| "-"| ">>"| "<<"| ">"| "<"| "<="| ">="| "=="|
        "!="| "&"| "^"| "|"| "&&"| "||"| "?:".
Описание = СпецификацииОписания СписокОписателейСИнициатором.
СпецификацииОписания = СпецификацияТипа [ СпецификацииОписания ]|
                       СпецификацияПамяти [ СпецификацииОписания ].
СпецификацияПамяти = AUTO| STATIC| EXTERN| REGISTER| TYPEDEF.
СпецификацияТипа = CHAR| SHORT| INT| LONG| UNSIGNED| FLOAT| DOUBLE|
                   СпецификацияЗаписиИлиСмеси| ИмяОпределенногоТипа.
СписокОписателейСИнициатором = ОписательСИнициатором| ОписательСИнициатором
                               "," СписокОписателейСИнициатором.
ОписательСИнициатором = Описатель [ Инициатор ].
Описатель = Идентификатор| "(" Описатель ")"| "*" Описатель| Описатель "()"|
            Описатель [ "[" КонстантноеВыражение "]" ].
СпецификацияЗаписиИлиСмеси = STRUCT "{" СписокОписанийЗаписи "}"| STRUCT
                             Идентификатор "{" СписокОписанийЗаписи "}"|
                             STRUCT Идентификатор| UNION "{" СписокОписанийЗаписи "}"|
                             UNION Идентификатор "{" СписокОписанийЗаписи "}"|
                             UNION Идентификатор.
СписокОписанийЗаписи = ОписаниеЗаписи| ОписаниеЗаписи СписокОписанийЗаписи.
ОписаниеЗаписи = СпецификацияТипа СписокОписателейЗаписи.
СписокОписателейЗаписи = ОписательЗаписи| ОписательЗаписи "," СписокОписателейЗаписи.
ОписательЗаписи = Описатель| Описатель ":" КонстантноеВыражение| ":"
                  КонстантноеВыражение.
Инициатор = "=" Выражение| "=" "{" СписокИнициаторов "}"| "=" "{" СписокИнициаторов
            "," "}".
СписокИнициаторов = Выражение| СписокИнициаторов "," СписокИнициаторов|
                   "{" СписокИнициаторов "}".
ИмяТипа = СпецификацияТипа АбстрактныйОписатель.
АбстрактныйОписатель = пусто| "(" АбстрактныйОписатель ")"| "*" АбстрактныйОписатель
                       | АбстрактныйОписатель "()"| АбстрактныйОписатель
                       [ "[" КонстантноеВыражение "]" ].
ИмяОписанногоТипа = Идентификатор.
СоставнойОператор = "{" [ СписокОписаний ] [ СписокОператоров ] "}".
СписокОписаний = Описание| Описание СписокОписаний.
СписокОператоров = Оператор| Оператор СписокОператоров.
Оператор = СоставнойОператор| Выражение ";"| IF "(" Выражение ")" Оператор|
           IF "(" Выражение ")" Оператор ELSE Оператор| WHILE "(" Выражение ")"
           Оператор| DO Оператор WHILE "(" Выражение ")"| FOR  ["(" Выражение
           ";" Выражение ";" Выражение ")"]  Оператор| SWITCH "(" Выражение ")"
           Оператор| CASE КонстантноеВыражение ":" Оператор| DEFAULT ":" Оператор|
           BREAK ";"| CONTINUE ";"| RETURN ";"| RETURN Выражение ";"| GOTO
           Идентификатор ";"| Идентификатор ":" Оператор| ";".
Программа = ВнешнееОпределение| ВнешнееОпределение Программа.
ВнешнееОпределение = ОпределениеФункции| ОпределениеДанных.
ОпределениеФункции = [ СпецификацияТипа ] ОписательФункции ТелоФункции.
ОписательФункции = Описатель [ СписокПараметров ].
СписокПараметров = Идентификатор| Идентификатор "," СписокПараметров.
ТелоФункции = СписокОписаний СамаФункция.
СамаФункция = "{" [ СписокОписаний ] СписокОператоров "}" .
ОпределениеДанных = [ EXTERN ] [ СпецификацияТипа ] [ СписокОписателейСИнициатором ]|
                    [ STATIC ] [ СпецификацияТипа ] [ СписокОписателейСИнициатором ].
КонстантноеВыражение = Выражение.
Идентификатор = Буква|  "_" { Буква| Цифра| "_" }.
Константа = ЦелаяКонстанта| ЯвнаяДлиннаяКонстанта| СимвольнаяКонстанта|
            КонстантаСПлавающейТочкой.
ПрисОп = "+="| "-="| "*="| "/="| "%="| "<<="| ">>="| "&="| "^="| "|=".
ЦелаяКонстанта = ВосьмеричнаяКонстанта| ШестнадцатиричнаяКонстанта|
                 ДесятичнаяКонстанта.
ВосьмеричнаяКонстанта = "0" ВосьмеричнаяЦифра {ВосьмеричнаяЦифра} .
ВосьмеричнаяЦифра = "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7".
ШестнадцатиричнаяКонстанта = ( "0x"| "0X" ) ШестнадцатиричнаяЦифра{ШестнадцатиричнаяЦифра}.
ШестнадцатиричнаяЦифра = Цифра | "A"| "a"| "B"| "b"| "C"| "c"|
                              "D"| "d"| "E"| "e"| "F"| "f".
ДесятичнаяКонстанта = "1"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9" { Цифра }.
ЯвнаяДлиннаяКонстанта = ВосьмеричнаяКонстанта "L"| "l" | ШестнадцатиричнаяКонстанта
                        "L"| "l"| ДесятичнаяКонстанта "L"| "l".
КонстантаСПлавающейТочкой = Цифра { Цифра } "." { Цифра } [ Порядок ].
Порядок = "E"| "e" [ "+"| "-" ] Цифра { Цифра } .
Буква = "A"| "B"| "C"| "D"| "E"| "F"| "G"| "H"| "I"| "J"| "K"| "L"| "M"|
        "N"| "O"| "P"| "R"| "S"| "T"| "U"| "V"| "W"| "X"| "Y"| "Z"|
        "a"| "b"| "c"| "d"| "e"| "f"| "g"| "h"| "i"| "j"| "k"| "l"| "m"|
        "n"| "o"| "p"| "r"| "s"| "t"| "u"| "v"| "w"| "x"| "y"| "z".
Цифра = "0"| "1"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9".
СимвольнаяКонстанта = " ' " символ | " \n "| " \t "| " \b "| " \r "| " \f "|
                      " \\ "| " \' "
                      | " \"  ВосьмеричнаяЦифра [ ВосьмеричнаяЦифра
                      [ ВосьмеричнаяЦифра ] ] " ' ".
Строка = ' " ' { символ| " \n "| " \t "| " \b "| " \r "| " \f "|
                      " \\ "| " \' " 
                      | " \ "  ВосьмеричнаяЦифра [ ВосьмеричнаяЦифра
                      [ ВосьмеричнаяЦифра ] ]  } ' " ' .
СписокВыражений = Выражение| СписокВыражений "," СписокВыражений.
ИмяОпределенногоТипа = Имя.
Имя = Буква { Цифра| Буква| "_" }.