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

ИмяКласса = Идентификатор.
ИмяПеречисления = Идентификатор.
ОписанноеИмяТипа = Идентификатор.
Выражение = ВыражениеПрисваивания| Выражение "," ВыражениеПрисваивания.
ВыражениеПрисваивания = УсловноеВыражение| УнарноеВыражение ОперацияПрисваивания ВыражениеПрисваивания.
ОперацияПрисваивания = "="| "*="| "/="| "%="| "+="| "-="| ">>="| "<<="|
                       "&="| "^="| "|=".
УсловноеВыражение = ЛогическоеВыражениеИли| ЛогическоеВыражениеИли "?"
                    Выражение ":" УсловноеВыражение.
ЛогическоеВыражениеИли = ЛогическоеВыражениеИ| ЛогическоеВыражениеИли "||"
                         ЛогическоеВыражениеИ.
ЛогическоеВыражениеИ = ВключающееВыражениеИли| ЛогическоеВыражениеИ "&&"
                       ВключающееВыражениеИли.
ВключающееВыражениеИли = ИсключающееВыражениеИли| ВключающееВыражениеИли "|"
                         ИсключающееВыражениеИли.
ИсключающееВыражениеИли = ВыражениеИ| ИсключающееВыражениеИли "^"
                          ВыражениеИ.
ВыражениеИ = ВыражениеРавенства| ВыражениеИ "&" ВыражениеРавенства.
ВыражениеРавенства = ВыражениеОтношения| ВыражениеРавенства "=="
                     ВыражениеОтношения| ВыражениеРавенства "!="
                     ВыражениеОтношения.
ВыражениеОтношения = ВыражениеСдвига| ВыражениеОтношения "<" ВыражениеСдвига|
                     ВыражениеОтношения ">" ВыражениеСдвига|
                     ВыражениеОтношения "<=" ВыражениеСдвига|
                     ВыражениеОтношения ">=" ВыражениеСдвига.
ВыражениеСдвига = АддитивноеВыражение| ВыражениеСдвига "<<" АддитивноеВыражение|
                  ВыражениеСдвига ">>" АддитивноеВыражение.
АддитивноеВыражение = МультипликативноеВыражение| АддитивноеВыражение "+"
                      МультипликативноеВыражение|
                      АддитивноеВыражение "-" МультипликативноеВыражение.
МультипликативноеВыражение = 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"  ШестнадцатиричнаяЦифра  { ШестнадцатиричнаяЦифра }
                      | " \ "  ВосьмеричнаяЦифра { ВосьмеричнаяЦифра } } ' " '.
ИмяШаблона = Идентификатор.