Spec-Zone.ru › Java Language Specification 21

Глава 19. Синтаксис

В этой главе повторяется синтаксическая грамматика, представленная в главах 4, 6-10, 14 и 15, а также ключевые части лексической грамматики из главы 3, используя обозначения из §2.4.

Производные правила из §3 (Лексическая структура)

Идентификатор:
IdentifierChars но не ReservedKeyword или BooleanLiteral или NullLiteral
IdentifierChars:
JavaLetter {JavaLetterOrDigit}
JavaLetter:
любой символ Юникода, являющийся "буквой Java"
JavaLetterOrDigit:
любой символ Юникода, являющийся "буквой или цифрой Java"
TypeIdentifier:
Идентификатор но не permits, record, sealed, var, или yield
UnqualifiedMethodIdentifier:
Идентификатор но не yield
Литерал:
Целочисленный литерал
Вещественный литерал
Булевый литерал
Символьный литерал
Строковый литерал
Текстовый блок
Литерал null

Производные правила из §4 (Типы, значения и переменные)

Тип:
Примитивный тип
Тип ссылки
Примитивный тип:
{Аннотация} Числовой тип
{Аннотация} boolean
Числовой тип:
Целочисленный тип
Тип с плавающей точкой
Целочисленный тип:
(один из)
byte short int long char
Тип с плавающей точкой:
(один из)
float double
Тип ссылки:
Тип класса или интерфейса
Переменная типа
Массивы
Тип класса или интерфейса:
Тип класса
Тип интерфейса
Тип класса:
{Аннотация} Идентификатор типа [Аргументы типа]
Имя пакета . {Аннотация} Идентификатор типа [Аргументы типа]
Тип класса или интерфейса . {Аннотация} Идентификатор типа [Аргументы типа]
Тип интерфейса:
Тип класса
Переменная типа:
{Аннотация} Идентификатор типа
Массивы:
Примитивный тип Размеры
Тип класса или интерфейса Размеры
Переменная типа Размеры
Размеры:
{Аннотация} [ ] {{Аннотация} [ ]}
Параметр типа:
{Модификатор параметра типа} Идентификатор типа [Связанный тип]
Модификатор параметра типа:
Аннотация
Связанный тип:
extends Переменная типа
extends Тип класса или интерфейса {Дополнительное ограничение}
Дополнительное ограничение:
& Тип интерфейса
Аргументы типа:
< Список аргументов типа >
Список аргументов типа:
Аргумент типа {, Аргумент типа}
Аргумент типа:
Тип ссылки
Подстановка
Подстановка:
{Аннотация} ? [Ограничения подстановки]
Ограничения подстановки:
extends Тип ссылки
super Тип ссылки
END_OF_DOCUMENT_MARKER

Производные из §6 (Имена)

Имя модуля:
Идентификатор
Имя модуля . Идентификатор
Имя пакета:
Идентификатор
Имя пакета . Идентификатор
Имя типа:
Идентификатор типа
Имя пакета или типа . Идентификатор типа
Имя выражения:
Идентификатор
Неоднозначное имя . Идентификатор
Имя метода:
Идентификатор метода без квалификатора
Имя пакета или типа:
Идентификатор
Имя пакета или типа . Идентификатор
Неоднозначное имя:
Идентификатор
Неоднозначное имя . Идентификатор

Производные из §7 (Пакеты и модули)

Единица компиляции:
Единица обычной компиляции
Единица модульной компиляции
Единица обычной компиляции:
[Декларация пакета] {Декларация импорта} {Декларация класса или интерфейса верхнего уровня}
Единица модульной компиляции:
{Декларация импорта} Декларация модуля
Декларация пакета:
{Модификатор пакета} package Идентификатор {. Идентификатор} ;
Модификатор пакета:
Аннотация
Декларация импорта:
Декларация импорта одного типа
Декларация импорта всех типов из пакета
Декларация статического импорта одного члена
Декларация статического импорта всех членов
Декларация импорта одного типа:
import Имя типа ;
Декларация импорта всех типов из пакета:
import Имя пакета или типа . * ;
Декларация статического импорта одного члена:
import static Имя типа . Идентификатор ;
Декларация статического импорта всех членов:
import static Имя типа . * ;
Декларация класса или интерфейса верхнего уровня:
Декларация класса
Декларация интерфейса
;
Декларация модуля:
{Аннотация} [open] module Идентификатор {. Идентификатор} { {Директива модуля} }
Директива модуля:
requires {Модификатор Requires} Имя модуля ;
exports Имя пакета [to Имя модуля {, Имя модуля}] ;
opens Имя пакета [to Имя модуля {, Имя модуля}] ;
uses Имя типа ;
provides Имя типа with Имя типа {, Имя типа} ;
Модификатор Requires:
(one of)
transitive static

Производные из §8 (Классы)

ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
RecordDeclaration
NormalClassDeclaration:
{МодификаторКласса} class ИдентификаторТипа [ПараметрыТипа] [Наследует] [Реализует] [Разрешает] ТелоКласса
ClassModifier:
(один из)
Аннотация public protected private
abstract static final sealed non-sealed strictfp
TypeParameters:
< СписокПараметровТипа >
TypeParameterList:
ПараметрТипа {, ПараметрТипа}
ClassExtends:
extends ТипКласса
ClassImplements:
implements СписокИнтерфейсов
InterfaceTypeList:
ТипИнтерфейса {, ТипИнтерфейса}
ClassPermits:
permits ИмяТипа {, ИмяТипа}
ClassBody:
{ {ОбъявлениеТелаКласса} }
ClassBodyDeclaration:
ОбъявлениеЧленаКласса
ИнициализаторЭкземпляра
СтатическийИнициализатор
ОбъявлениеКонструктора
ClassMemberDeclaration:
ОбъявлениеПоля
ОбъявлениеМетода
ОбъявлениеКласса
ОбъявлениеИнтерфейса
;
FieldDeclaration:
{МодификаторПоля} ТипБезАннотаций СписокОбъявленийПеременных ;
FieldModifier:
(один из)
Аннотация public protected private
static final transient volatile
VariableDeclaratorList:
ОбъявлениеПеременной {, ОбъявлениеПеременной}
VariableDeclarator:
ИдентификаторОбъявленияПеременной [= ИнициализацияПеременной]
VariableDeclaratorId:
Идентификатор [Размеры]
VariableInitializer:
Выражение
ИнициализаторМассива
UnannType:
ПримитивныйТипБезАннотаций
СсылочныйТипБезАннотаций
UnannPrimitiveType:
ЧисловойТип
boolean
UnannReferenceType:
ТипКлассаИлиИнтерфейсаБезАннотаций
ПеременнаяТипаБезАннотаций
МассивТипБезАннотаций
UnannClassOrInterfaceType:
ТипКлассаБезАннотаций
ТипИнтерфейсаБезАннотаций
UnannClassType:
ИдентификаторТипа [АргументыТипа]
ИмяПакет . {Аннотация} ИдентификаторТипа [АргументыТипа]
ТипКлассаИлиИнтерфейсаБезАннотаций . {Аннотация} ИдентификаторТипа [АргументыТипа]
UnannInterfaceType:
ТипКлассаБезАннотаций
UnannTypeVariable:
ИдентификаторТипа
UnannArrayType:
ПримитивныйТипБезАннотаций Размеры
ТипКлассаИлиИнтерфейсаБезАннотаций Размеры
ПеременнаяТипаБезАннотаций Размеры
MethodDeclaration:
{МодификаторМетода} ЗаголовокМетода ТелоМетода
MethodModifier:
(один из)
Аннотация public protected private
abstract static final synchronized native strictfp
MethodHeader:
ТипВозвращаемогоЗначения ДеклараторМетода [Исключения]
ПараметрыТипа {Аннотация} ТипВозвращаемогоЗначения ДеклараторМетода [Исключения]
Result:
ТипБезАннотаций
void
МетодДекларатор:
Идентификатор ( [ПараметрПолучателя ,] [СписокФормальныхПараметров] ) [Размеры]
ПараметрПолучателя:
{Аннотация} ТипБезАннотаций [Идентификатор .] this
СписокФормальныхПараметров:
ФормальныйПараметр {, ФормальныйПараметр}
ФормальныйПараметр:
{МодификаторПеременной} ТипБезАннотаций ИдентификаторДекларатораПеременной
ПараметрПеременнойАрности
ПараметрПеременнойАрности:
{МодификаторПеременной} ТипБезАннотаций {Аннотация} ... Идентификатор
МодификаторПеременной:
Аннотация
final
Исключения:
throws СписокТиповИсключений
СписокТиповИсключений:
ТипИсключения {, ТипИсключения}
ТипИсключения:
ТипКласса
ПеременнаяТипа
ТелоМетода:
Блок
;
ИнициализаторОбъекта:
Блок
СтатическийИнициализатор:
static Блок
ДекларацияКонструктора:
{МодификаторКонструктора} ДеклараторКонструктора [Исключения] ТелоКонструктора
МодификаторКонструктора:
(одно из)
Аннотация public protected private
ДеклараторКонструктора:
[ПараметрыТипов] ПростоеИмяТипа ( [ПараметрПолучателя ,] [СписокФормальныхПараметров] )
ПростоеИмяТипа:
ИдентификаторТипа
ТелоКонструктора:
{ [ЯвноеВызовКонструктора] [ОператорыБлока] }
ЯвноеВызовКонструктора:
[АргументыТипов] this ( [СписокАргументов] ) ;
[АргументыТипов] super ( [СписокАргументов] ) ;
ИмяВыражения . [АргументыТипов] super ( [СписокАргументов] ) ;
Основной . [АргументыТипов] super ( [СписокАргументов] ) ;
ДекларацияПеречисления:
{МодификаторКласса} enum ИдентификаторТипа [РеализуетКласс] ТелоПеречисления
ТелоПеречисления:
{ [СписокКонстантПеречисления] [,] [ДекларацииТелаПеречисления] }
СписокКонстантПеречисления:
КонстантаПеречисления {, КонстантаПеречисления}
КонстантаПеречисления:
{МодификаторКонстантыПеречисления} Идентификатор [( [СписокАргументов] )] [ТелоКласса]
МодификаторКонстантыПеречисления:
Аннотация
ДекларацииТелаПеречисления:
; {ДекларацияТелаКласса}
ДекларацияЗаписи:
{МодификаторКласса} record ИдентификаторТипа [ПараметрыТипов] ЗаголовокЗаписи [РеализуетКласс] ТелоЗаписи
ЗаголовокЗаписи:
( [СписокКомпонентовЗаписи] )
СписокКомпонентовЗаписи:
КомпонентЗаписи {, КомпонентЗаписи}
КомпонентЗаписи:
{МодификаторКомпонентаЗаписи} ТипБезАннотаций Идентификатор
КомпонентЗаписиПеременнойАрности
КомпонентЗаписиПеременнойАрности:
{МодификаторКомпонентаЗаписи} ТипБезАннотаций {Аннотация} ... Идентификатор
МодификаторКомпонентаЗаписи:
Аннотация
ТелоЗаписи:
{ {ДекларацияТелаЗаписи} }
RecordBodyDeclaration:
Объявление тела класса
Компактное объявление конструктора
CompactConstructorDeclaration:
{Модификатор конструктора} Простое имя типа Тело конструктора

Производные из §9 (Интерфейсы)

InterfaceDeclaration:
Нормальное объявление интерфейса
Объявление аннотационного интерфейса
NormalInterfaceDeclaration:
{Модификатор интерфейса} interface Идентификатор типа [Параметры типа] [Интерфейс расширяет] [Интерфейс разрешает] Тело интерфейса
InterfaceModifier:
(одно из)
Аннотация public protected private
abstract static sealed non-sealed strictfp
InterfaceExtends:
extends Список типов интерфейса
InterfacePermits:
permits Имя типа {, Имя типа}
InterfaceBody:
{ {Объявление члена интерфейса} }
InterfaceMemberDeclaration:
Объявление константы
Объявление метода интерфейса
Объявление класса
Объявление интерфейса
;
ConstantDeclaration:
{Модификатор константы} Тип без аннотаций Список объявляемых переменных ;
ConstantModifier:
(одно из)
Аннотация public
static final
InterfaceMethodDeclaration:
{Модификатор метода интерфейса} Заголовок метода Тело метода
InterfaceMethodModifier:
(одно из)
Аннотация public private
abstract default static strictfp
AnnotationInterfaceDeclaration:
{Модификатор интерфейса} @ interface Идентификатор типа Тело аннотационного интерфейса
AnnotationInterfaceBody:
{ {Объявление члена аннотационного интерфейса} }
AnnotationInterfaceMemberDeclaration:
Объявление элемента аннотационного интерфейса
Объявление константы
Объявление класса
Объявление интерфейса
;
AnnotationInterfaceElementDeclaration:
{Модификатор элемента аннотационного интерфейса} Тип без аннотаций Идентификатор ( ) [Размеры] [Значение по умолчанию] ;
AnnotationInterfaceElementModifier:
(одно из)
Аннотация public
abstract
DefaultValue:
default Значение элемента
Annotation:
Нормальная аннотация
Аннотация-метка
Аннотация с единственным элементом
NormalAnnotation:
@ Имя типа ( [Список пар имя-значение элемента] )
ElementValuePairList:
Пара имя-значение элемента {, Пара имя-значение элемента}
ElementValuePair:
Идентификатор = Значение элемента
ElementValue:
Условное выражение
Инициализатор массива значений элементов
Аннотация
ElementValueArrayInitializer:
{ [Список значений элементов] [,] }
ElementValueList:
Значение элемента {, Значение элемента}
MarkerAnnotation:
@ Имя типа
SingleElementAnnotation:
@ Имя типа ( Значение элемента )

Производные из §10 (Массивы)

ArrayInitializer:
{ [Список инициализаторов переменных] [,] }
VariableInitializerList:
Инициализатор переменной {, Инициализатор переменной}

Производные из §14 (Блоки, операторы и шаблоны)

Блок:
{ [BlockStatements] }
BlockStatements:
BlockStatement {BlockStatement}
BlockStatement:
LocalClassOrInterfaceDeclaration
Оператор объявления локальной переменной
Оператор
LocalClassOrInterfaceDeclaration:
Объявление класса
Нормальное объявление интерфейса
LocalVariableDeclarationStatement:
Локальное объявление переменной ;
LocalVariableDeclaration:
{Модификатор переменной} Тип локальной переменной Список объявляемых переменных
LocalVariableType:
Тип без аннотаций
var
Оператор:
Оператор без подчинённого оператора
Оператор с меткой
Оператор if-then
Оператор if-then-else
Оператор while
Оператор for
StatementNoShortIf:
Оператор без подчинённого оператора
Оператор с меткой без short if
Оператор if-then-else без short if
Оператор while без short if
Оператор for без short if
StatementWithoutTrailingSubstatement:
Блок
Пустой оператор
Оператор выражения
Оператор утверждения
Оператор switch
Оператор do-while
Оператор break
Оператор continue
Оператор return
Оператор synchronized
Оператор throw
Оператор try
Оператор yield
EmptyStatement:
;
LabeledStatement:
Идентификатор : Оператор
LabeledStatementNoShortIf:
Идентификатор : Оператор без short if
Оператор выражения:
Оператор выражения ;
Оператор выражения:
Присваивание
Префиксный инкремент
Префиксный декремент
Постфиксный инкремент
Постфиксный декремент
Вызов метода
Выражение создания экземпляра класса
IfThenStatement:
if ( Выражение ) Оператор
IfThenElseStatement:
if ( Выражение ) Оператор без short if else Оператор
IfThenElseStatementNoShortIf:
if ( Выражение ) Оператор без short if else Оператор без short if
AssertStatement:
assert Выражение ;
assert Выражение : Выражение ;
SwitchStatement:
switch ( Выражение ) Блок switch
SwitchBlock:
{ Правило switch {Правило switch} }
{ {Группа операторов блока switch} {Метка switch :} }
Правило switch:
Метка switch -> Выражение ;
Метка switch -> Блок
Метка switch -> Оператор throw
Группа операторов блока switch:
Метка switch : {Метка switch :} BlockStatements
Метка switch:
case Постоянная case {, Постоянная case}
case null [, default]
case Шаблон case [Защита]
default
Постоянная case:
Условное выражение
Шаблон case:
Шаблон
Guard:
when Выражение
WhileStatement:
while ( Выражение ) Оператор
WhileStatementNoShortIf:
while ( Выражение ) ОператорБезКороткихУсловныхОпераций
DoStatement:
do Оператор while ( Выражение ) ;
ForStatement:
BasicForStatement
УлучшенныйОператорFor
ForStatementNoShortIf:
BasicForStatementNoShortIf
УлучшенныйОператорForБезКороткихУсловныхОпераций
BasicForStatement:
for ( [ForInit] ; [Выражение] ; [ForUpdate] ) Оператор
BasicForStatementNoShortIf:
for ( [ForInit] ; [Выражение] ; [ForUpdate] ) ОператорБезКороткихУсловныхОпераций
ForInit:
СписокВыраженийОператоров
ОбъявлениеЛокальнойПеременной
ForUpdate:
СписокВыраженийОператоров
StatementExpressionList:
ВыражениеОператора {, ВыражениеОператора}
EnhancedForStatement:
for ( ОбъявлениеЛокальнойПеременной : Выражение ) Оператор
EnhancedForStatementNoShortIf:
for ( ОбъявлениеЛокальнойПеременной : Выражение ) ОператорБезКороткихУсловныхОпераций
BreakStatement:
break [Идентификатор] ;
YieldStatement:
yield Выражение ;
ContinueStatement:
continue [Идентификатор] ;
ReturnStatement:
return [Выражение] ;
ThrowStatement:
throw Выражение ;
SynchronizedStatement:
synchronized ( Выражение ) Блок
TryStatement:
try Блок ОбработчикиИсключений
try Блок [ОбработчикиИсключений] Finally
TryWithResourcesStatement
Catches:
ОбработкаИсключения {ОбработкаИсключения}
CatchClause:
catch ( ПараметрОбработкиИсключения ) Блок
CatchFormalParameter:
{МодификаторПеременной} ТипОбработкиИсключения ИдентификаторДескриптораПеременной
CatchType:
ТипБезАннотаций {| ТипКласса}
Finally:
finally Блок
TryWithResourcesStatement:
try СпецификацияРесурсов Блок [ОбработчикиИсключений] [Finally]
ResourceSpecification:
( СписокРесурсов [;] )
ResourceList:
Ресурс {; Ресурс}
Resource:
ОбъявлениеЛокальнойПеременной
ДоступКПеременной
Pattern:
ПаттернТипа
ПаттернЗаписи
TypePattern:
ОбъявлениеЛокальнойПеременной
RecordPattern:
ТипСсылка ( [СписокПаттернов] )
PatternList:
Паттерн {, Паттерн }

Производные из §15 (Выражения)

Первичное:
PrimaryNoNewArray
Создание массива
Первичное без нового массива:
Литерал
Литерал класса
this
Тип имени . this
( Выражение )
Выражение создания экземпляра класса
Доступ к полю
Доступ к элементу массива
Вызов метода
Ссылка на метод
Литерал класса:
Тип имени {[ ]} . class
Числовой тип {[ ]} . class
boolean {[ ]} . class
void . class
Выражение создания экземпляра класса:
Неквалифицированное выражение создания экземпляра класса
Имя выражения . Неквалифицированное выражение создания экземпляра класса
Первичное . Неквалифицированное выражение создания экземпляра класса
Неквалифицированное выражение создания экземпляра класса:
new [Аргументы типа] Тип класса или интерфейса для создания ( [Список аргументов] ) [Тело класса]
Тип класса или интерфейса для создания:
{Аннотация} Идентификатор {. {Аннотация} Идентификатор} [Аргументы типа или алмаз]
Аргументы типа или алмаз:
Аргументы типа
<>
Выражение создания массива:
Выражение создания массива без инициализатора
Выражение создания массива с инициализатором
Выражение создания массива без инициализатора:
new Примитивный тип DimExprs [Размеры]
new Тип класса или интерфейса DimExprs [Размеры]
Выражение создания массива с инициализатором:
new Примитивный тип Размеры Инициализатор массива
new Тип класса или интерфейса Размеры Инициализатор массива
DimExprs:
DimExpr {DimExpr}
DimExpr:
{Аннотация} [ Выражение ]
Доступ к элементу массива:
Имя выражения [ Выражение ]
Первичное без нового массива [ Выражение ]
Выражение создания массива с инициализатором [ Выражение ]
Доступ к полю:
Первичное . Идентификатор
super . Идентификатор
Тип имени . super . Идентификатор
Вызов метода:
Имя метода ( [Список аргументов] )
Тип имени . [Аргументы типа] Идентификатор ( [Список аргументов] )
Имя выражения . [Аргументы типа] Идентификатор ( [Список аргументов] )
Первичное . [Аргументы типа] Идентификатор ( [Список аргументов] )
super . [Аргументы типа] Идентификатор ( [Список аргументов] )
Тип имени . super . [Аргументы типа] Идентификатор ( [Список аргументов] )
Список аргументов:
Выражение {, Выражение}
MethodReference:
Имя выражения :: [Аргументы типа] Идентификатор
Основное :: [Аргументы типа] Идентификатор
Тип ссылки :: [Аргументы типа] Идентификатор
super :: [Аргументы типа] Идентификатор
Имя типа . super :: [Аргументы типа] Идентификатор
Тип класса :: [Аргументы типа] new
Тип массива :: new
Expression:
Lambda-выражение
Выражение присваивания
LambdaExpression:
Параметры Lambda -> Тело Lambda
LambdaParameters:
( [Список параметров Lambda] )
Идентификатор
LambdaParameterList:
Параметр Lambda {, Параметр Lambda}
Идентификатор {, Идентификатор}
LambdaParameter:
{Модификатор переменной} Тип параметра Lambda Идентификатор объявления переменной
Параметр с переменной арностью
LambdaParameterType:
Тип без аннотаций
var
LambdaBody:
Выражение
Блок
AssignmentExpression:
Условное выражение
Присваивание
Assignment:
Левая часть Оператор присваивания Выражение
LeftHandSide:
Имя выражения
Доступ к полю
Доступ к массиву
AssignmentOperator:
(один из)
=  *=  /=  %=  +=  -=  <<=  >>=  >>>=  &=  ^=  |=
ConditionalExpression:
Условное ИЛИ выражение
Условное ИЛИ выражение ? Выражение : Условное выражение
Условное ИЛИ выражение ? Выражение : Lambda-выражение
ConditionalOrExpression:
Условное И выражение
Условное ИЛИ выражение || Условное И выражение
ConditionalAndExpression:
Включительно ИЛИ выражение
Условное И выражение && Включительно ИЛИ выражение
InclusiveOrExpression:
Исключительно ИЛИ выражение
Включительно ИЛИ выражение | Исключительно ИЛИ выражение
ExclusiveOrExpression:
И выражение
Исключительно ИЛИ выражение ^ И выражение
AndExpression:
Выражение равенства
И выражение & Выражение равенства
EqualityExpression:
Выражение отношения
Выражение равенства == Выражение отношения
Выражение равенства != Выражение отношения
RelationalExpression:
Выражение сдвига
Выражение отношения < Выражение сдвига
Выражение отношения > Выражение сдвига
Выражение отношения <= Выражение сдвига
Выражение отношения >= Выражение сдвига
Выражение instanceof
InstanceofExpression:
Выражение отношения instanceof Тип ссылки
Выражение отношения instanceof Шаблон
ShiftExpression:
Арифметическое выражение
Выражение сдвига << Арифметическое выражение
Выражение сдвига >> Арифметическое выражение
Выражение сдвига >>> Арифметическое выражение
AdditiveExpression:
Умножительное выражение
Сложение выражение + Умножительное выражение
Сложение выражение - Умножительное выражение
MultiplicativeExpression:
Унарное выражение
Умножительное выражение * Унарное выражение
Умножительное выражение / Унарное выражение
Умножительное выражение % Унарное выражение
UnaryExpression:
Префиксное увеличение
Префиксное уменьшение
+ Унарное выражение
- Унарное выражение
Унарное выражение без плюса/минуса
PreIncrementExpression:
++ Унарное выражение
PreDecrementExpression:
-- Унарное выражение
UnaryExpressionNotPlusMinus:
Постфиксное выражение
~ Унарное выражение
! Унарное выражение
Выражение приведения типов
Выражение выбора
PostfixExpression:
Первичный
Имя выражения
Постфиксное увеличение
Постфиксное уменьшение
PostIncrementExpression:
Постфиксное выражение ++
PostDecrementExpression:
Постфиксное выражение --
CastExpression:
( Примитивный тип ) Унарное выражение
( Тип ссылки {Дополнительное ограничение} ) Унарное выражение без плюса/минуса
( Тип ссылки {Дополнительное ограничение} ) Лямбда-выражение
SwitchExpression:
switch ( Выражение ) Блок выбора
ConstantExpression:
Выражение

© Oracle and/or its affiliates. All rights reserved.
Licensed under the Oracle Technology Network License Agreement.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API