Си++
Описание подготовлено Н. Скотниковой
ИмяКласса = Идентификатор.
ИмяПеречисления = Идентификатор.
ОписанноеИмяТипа = Идентификатор.
Выражение = ВыражениеПрисваивания| Выражение "," ВыражениеПрисваивания.
ВыражениеПрисваивания = УсловноеВыражение| УнарноеВыражение ОперацияПрисваивания ВыражениеПрисваивания.
ОперацияПрисваивания = "="| "*="| "/="| "%="| "+="| "-="| ">>="| "<<="|
"&="| "^="| "|=".
УсловноеВыражение = ЛогическоеВыражениеИли| ЛогическоеВыражениеИли "?"
Выражение ":" УсловноеВыражение.
ЛогическоеВыражениеИли = ЛогическоеВыражениеИ| ЛогическоеВыражениеИли "||"
ЛогическоеВыражениеИ.
ЛогическоеВыражениеИ = ВключающееВыражениеИли| ЛогическоеВыражениеИ "&&"
ВключающееВыражениеИли.
ВключающееВыражениеИли = ИсключающееВыражениеИли| ВключающееВыражениеИли "|"
ИсключающееВыражениеИли.
ИсключающееВыражениеИли = ВыражениеИ| ИсключающееВыражениеИли "^"
ВыражениеИ.
ВыражениеИ = ВыражениеРавенства| ВыражениеИ "&" ВыражениеРавенства.
ВыражениеРавенства = ВыражениеОтношения| ВыражениеРавенства "=="
ВыражениеОтношения| ВыражениеРавенства "!="
ВыражениеОтношения.
ВыражениеОтношения = ВыражениеСдвига| ВыражениеОтношения "<" ВыражениеСдвига|
ВыражениеОтношения ">" ВыражениеСдвига|
ВыражениеОтношения "<=" ВыражениеСдвига|
ВыражениеОтношения ">=" ВыражениеСдвига.
ВыражениеСдвига = АддитивноеВыражение| ВыражениеСдвига "<<" АддитивноеВыражение|
ВыражениеСдвига ">>" АддитивноеВыражение.
АддитивноеВыражение = МультипликативноеВыражение| АддитивноеВыражение "+"
МультипликативноеВыражение|
АддитивноеВыражение "-" МультипликативноеВыражение.
МультипликативноеВыражение = PMВыражение| МультипликативноеВыражение "*"
PMВыражение| МультипликативноеВыражение "/"
PMВыражение| МультипликативноеВыражение "%"
PMВыражение.
PMВыражение = ВыражениеПриведения| PMВыражение ".*" ВыражениеПриведения|
PMВыражение "->*" ВыражениеПриведения.
ВыражениеПриведения = УнарноеВыражение| "(" ИмяТипа")" ВыражениеПриведения.
УнарноеВыражение = ПостфиксноеВыражение| "++" УнарноеВыражение| "--"
УнарноеВыражение| УнарнаяОперация ВыражениеПриведения|
SIZEOF УнарноеВыражение| SIZEOF "(" ИмяТипа")"|
ВыражениеРазмещения| ВыражениеОсвобождения.
УнарнаяОперация = "*"| "&"| "+"| "-"| "!"| "~".
ВыражениеРазмещения = ["::"] NEW [ Размещение ] ИмяТипаNew [ ИнициализацияNew ]|
["::"] NEW [ Размещение ] "(" ИмяТипа ")" [ ИнициализацияNew ].
Размещение = "(" СписокВыражений ")".
ИмяТипаNew = СписокСпецификаторовТипа [ ОписательNew ].
ОписательNew = "*" [ СписокCvОписателей ] [ ОписательNew ]| ПолноеИмяКласса
"::" [ "*" СписокCvОписателей ] [ ОписательNew ]|
[ ОписательNew ] "[" Выражение "]".
ИнициализацияNew = [ "(" СписокИнициализаторов ")" ].
ВыражениеОсвобождения = [ "::" ] DELETE ВыражениеПриведения| [ "::" ]
DELETE "[]" ВыражениеПриведения .
ПостфиксноеВыражение = ПервичноеВыражение| ПостфиксноеВыражение "[" Выражение "]"|
ПостфиксноеВыражение [ "(" СписокВыражений ")" ]|
ИмяПростогоТипа [ "(" СписокВыражений ")" ]|
ПостфиксноеВыражение "." Имя| ПостфиксноеВыражение "=>" Имя|
ПостфиксноеВыражение "++"| ПостфиксноеВыражение "--".
СписокВыражений = ВыражениеПрисваивания| СписокВыражений "," ВыражениеПрисваивания.
ПервичноеВыражение = Литерал| THIS| "::" Идентификатор| "::" ИмяФункцииОперации|
"::" КвалифицированноеИмя| "(" Выражение")"| Имя.
Имя = Идентификатор| ИмяФункцииОперации| ИмяФункцииПриведения| "~" ИмяКласса|
КвалифицированноеИмя.
КвалифицированноеИмя = КвалифицированноеИмяКласса "::" Имя.
Литерал = ЦелаяКонстанта| ЛитернаяКонстанта| ПлавающаяКонстанта| ЛитернаяСтрока.
Объявление = [ Dec1Спецификаторы ] [ СписокОписателей ]|
AsmОбъявление| ОписаниеФункции| ОбъявлениеШаблона|
СпецификацияСборки.
Dec1Спецификатор = СпецификаторКлассаПамяти| СпецификаторТипа|
FctСпецификатор| FRIEND| TYPEDEF.
Dec1Спецификаторы = [ Dec1Спецификаторы ] Dec1Спецификатор.
СпецификаторКлассаПамяти = AUTO| REGISTER| STATIC| EXTERN.
FctСпецификатор = INLINE| VIRTUAL.
СпецификаторТипа = ИмяПростогоТипа| СпецификаторКласса| СпецификаторПеречисления| УточненныйСпецификаторТипа
CONST| VOLATILE.
ИмяПростогоТипа = ПолноеИмяКласса| КвалифицированноеИмяТипа| CHAR| SHORT|
INT| LONG| SIGNED| UNSIGNED| FLOAT| DOUBLE| VOID.
УточненныйСпецификаторТипа = КлючевоеСловоКласса Идентификатор|
КлючевоеСловоКласса ИмяКласса.
КлючевоеСловоКласса = CLASS| STRUCT| UNION.
КвалифицированноеИмяТипа = ОписанноеИмяТипа| ИмяКласса "::"
КвалифицированноеИмяТипа.
ПолноеИмяКласса = КвалифицированноеИмяКласса| "::" КвалифицированноеИмяКласса.
КвалифицированноеИмяКласса = ИмяКласса| ИмяКласса "::" КвалифицированноеИмяКласса.
СпецификаторПеречисления = ENUM [ Идентификатор ] [ "{" СписокПеречисления "}" ].
СписокПеречисления = ЭлементПеречисления | СписокПеречисления ","
ЭлементПеречисления.
ЭлементПеречисления = Идентификатор| Идентификатор "=" КонстантноеВыражение.
КонстантноеВыражение = УсловноеВыражение.
СпецификацияСборки = EXTERN ЛитернаяСтрока [ "{" СписокОбъявлений "}" ]|
EXTERN ЛитернаяСтрока Объявление.
СписокОбъявлений = Объявление| СписокОбъявлений Объявление.
AsmОбъявление = ASM "(" ЛитернаяСтрока ")".
СписокОписателей = ОписательСИнициализацией| СписокОписателей ","
ОписательСИнициализацией.
ОписательСИнициализацией = Описатель [ Инициализатор ].
Описатель = DИмя| PtrОперация Описатель| Описатель "(" СписокОбъявленийПараметров ")"
[ СписокCvОписателей ]| Описатель [ "[" КонстантноеВыражение "]"]|
"(" Описатель ")".
PtrОперация = "*" [ СписокCvОписателей ]| "&" [ СписокCvОписателей ]|
ПолноеИмяКласса "::" "*" [ СписокCvОписателей ].
СписокCvОписателей = CvОписатель [ СписокCvОписателей ].
CvОписатель = CONST| VOLATILE.
DИмя = Имя| ИмяКласса| "~" ИмяКласса| ОписанноеИмяТипа|
КвалифицированноеИмяТипа.
ИмяТипа = СписокСпецификаторовТипа [ АбстрактныйОписатель].
СписокСпецификаторовТипа = СпецификаторТипа [ СписокСпецификаторовТипа ].
АбстрактныйОписатель = PtrОперация [ АбстрактныйОписатель ]|
[ АбстрактныйОписатель ] "(" СписокОбъявленийПараметров ")"
[ СписокCvОписателей ] | [ АбстрактныйОписатель ]
[ "[" КонстантноеВыражение "]" ]|
"("АбстрактныйОписатель ")".
СписокОбъявленийПараметров = [ СписокОбъявленийПар ] [ "..." ]|
СписокОбъявленийПар "," "...".
СписокОбъявленийПар = ОбъявлениеПараметра| СписокОбъявленийПар ","
ОбъявлениеПараметра .
ОбъявлениеПараметра = Dec1Спецификаторы Описатель| Dec1Спецификаторы
Описатель "=" Выражение| Dec1Спецификаторы
[ АбстрактныйОписатель ]| Dec1Спецификаторы
[ АбстрактныйОписатель ] "=" Выражение.
ОписаниеФункции = [ Dec1Спецификаторы ] Описатель [ CtorИнициализация ]
ТелоФункции.
ТелоФункции = СоставнойОператор.
Инициализатор = "=" Выражение| "=" [ { СписокИнициализаторов "," } ]|
"(" СписокВыражений ")".
СписокИнициализаторов = Выражение| СписокИнициализаторов "," Выражение|
[ "{" СписокИнициализаторов "," "}" ].
СпецификаторКласса = ЗаголовокКласса [ "{" СписокЧленов "}" ].
ЗаголовокКласса = КлючевоеСловоКласса [ Идентификатор ] [ СпецификацияБазы ]|
КлючевоеСловоКласса ИмяКласса [ СпецификацияБазы ].
СписокЧленов = ОбъявлениеЧлена [ СписокЧленов ]| СпецификаторДоступа ":"
[ СписокЧленов ].
ОбъявлениеЧлена = [ Dec1Спецификаторы ] [ СписокОписателейЧленов ] ";"|
ОписаниеФункции [ ";" ]| КвалифицированноеИмя ";".
СписокОписателейЧленов = ОписательЧлена| СписокОписателейЧленов ","
ОписательЧлена.
ОписательЧлена = Описатель [ ЧистыйСпецификатор ]| [ Идентификатор ] ":"
КонстантноеВыражение.
ЧистыйСпецификатор = "=0".
СпецификацияБазы = ":" СписокБаз.
СписокБаз = ОписательБазы| СписокБаз "," ОписательБазы.
ОписательБазы = ПолноеИмяКласса| VIRTUAL [СпецификаторДоступа ] ПолноеИмяКласса|
СпецификаторДоступа [ VIRTUAL ] ПолноеИмяКласса.
СпецификаторДоступа = PRIVAITE| PROTECTED| PUBLIC.
ИмяФункцииПриведения = OPERATOR ИмяПриведенногоТипа.
ИмяПриведенногоТипа = СписокСпецификаторовТипа [ PtrОперация ].
CtorИнициализация = ":" СписокИнициализаторовЧленов.
СписокИнициализаторовЧленов = ИнициализаторЧлена| ИнициализаторЧлена ","
СписокИнициализаторовЧленов.
ИнициализаторЧлена = ПолноеИмяКласса [ "(" СписокВыражений ")" ]|
Идентификатор [ "(" СписокВыражений ")" ].
ИмяФункцииОперации = OPERATOR Операция.
Операция = NEW| DELETE| "+"| "-"| "*"| "/"| "%"| "^"| "&"| "|"| "~"|
"!"| "="| "<"| ">"| "+="| "-="| "*="| "/="| "%="|
"^="| "&="| "|="| "<<"| ">>"| "<<="| ">>="| "=="| "!="|
"<="| ">="| "&&"| "||"| "++"| "--"| ","| "->*"| "->"|
"()"| "[]".
Оператор = ПомеченныйОператор| ОператорВыражение| СоставнойОператор|
ВыбирающийОператор| ОператорЦикла| ОператорПерехода|
ОператорОбъявление.
ПомеченныйОператор = Идентификатор ":" Оператор| CASE КонстантноеВыражение
":" Оператор| DEFAULT ":" Оператор.
ОператорВыражение = [ Выражение ].
СоставнойОператор = [ "{" СписокОператоров "}" ].
СписокОператоров = Оператор| СписокОператоров Оператор.
ВыбирающийОператор = IF "(" Выражение ")" Оператор| IF "(" Выражение ")"
Оператор ELSE Оператор| SWITCH "(" Выражение ")"
Оператор.
ОператорЦикла = WHILE "(" Выражение ")" Оператор| DO Оператор WHILE
"(" Выражение ")" ";"| FOR "(" ОператорИницFor [ Выражение ]
";" [ Выражение ] ")" Оператор.
ОператорИницFor = ОператорВыражение| ОператорОбъявление.
ОператорПерехода = BREAK ";"| CONTINUE ";"| RETURN [ Выражение ] ";"|
GOTO Идентификатор ";".
ОператорОбъявление = Объявление.
ОбъявлениеШаблона = TEMPLATE "<" СписокПараметровШаблона ">" Объявление.
СписокПараметровШаблона = ПараметрШаблона| СписокПараметровШаблона ","
ПараметрШаблона.
ПараметрШаблона = ТиповойПараметр| ОбъявлениеПараметра.
ТиповойПараметр = CLASS Идентификатор.
ИмяКлассаПоШаблону = ИмяШаблона "<" СписокФактПарШаблона ">" .
СписокФактПарШаблона = ФактическийПараметрШаблона| СписокФактПарШаблона
"," ФактическийПараметрШаблона.
ФактическийПараметрШаблона = Выражение| ИмяТипа.
БлокСКонтролем = TRY СоставнойОператор СписокРеакций.
СписокРеакций = Реакция [ СписокРеакций ].
Реакция = CATCH "(" ОбъявлениеСитуации ")" СоставнойОператор.
ОбъявлениеСитуации = СписокСпецификаторовТипа Описатель| СписокСпецификаторовТипа
АбстрактныйОписатель| СписокСпецификаторовТипа "..." .
ВыражениеВозбужденияСитуации = THROW [ Выражение ].
СпецификацияСитуаций = THROW [ "(" СписокТипов ")" ].
СписокТипов = ИмяТипа| СписокТипов "," ИмяТипа.
КонстантноеВыражение = Выражение.
Идентификатор = Буква| "_" { Буква| Цифра| "_" }.
ЦелаяКонстанта = ВосьмеричнаяКонстанта| ШестнадцатиричнаяКонстанта|
ДесятичнаяКонстанта.
ВосьмеричнаяКонстанта = "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" { Цифра }.
ПлавающаяКонстанта = Цифра { Цифра } "." { Цифра } [ Порядок ].
Порядок = "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 "| " \v "| " \b "| " \r "|
" \f "| " \a "| " \\ "| " \? "| " \' "| ' \" '|
"x" ШестнадцатиричнаяЦифра { ШестнадцатиричнаяЦифра }
| " \ " ВосьмеричнаяЦифра { ВосьмеричнаяЦифра } " ' ".
ЛитернаяСтрока = ' " ' { символ| " \n "| " \t "| " \v "| " \b "| " \r "|
" \f "| " \a "| " \\ "| " \? "| " \' "| ' \" '|
"x" ШестнадцатиричнаяЦифра { ШестнадцатиричнаяЦифра }
| " \ " ВосьмеричнаяЦифра { ВосьмеричнаяЦифра } } ' " '.
ИмяШаблона = Идентификатор.