Си
Описание подготовлено Н. Скотниковой
Выражение = Первичное| "*" Выражение| "&" Выражение| "-" Выражение|
"!" Выражение| "~" Выражение| "++" Адрес| "--" Адрес|
Адрес "++"| Адрес "--"| 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 "|
" \\ "| " \' "
| " \ " ВосьмеричнаяЦифра [ ВосьмеричнаяЦифра
[ ВосьмеричнаяЦифра ] ] } ' " ' .
СписокВыражений = Выражение| СписокВыражений "," СписокВыражений.
ИмяОпределенногоТипа = Имя.
Имя = Буква { Цифра| Буква| "_" }.