RoboBrain Interchange Language
Версия от 05:54, 22 октября 2009; Виктор Казаринов (обсуждение | вклад) (Новая страница: «Категория:RoboBrain Категория:RBIL (RoboBrain Interchange Language) RBIL - открытый стандарт языка верхнего …»)
RBIL - открытый стандарт языка верхнего уровня, предназначенной для взаимодействия электронных модулей в роботехнике.
За основу взята рекомендация FIPA - язык ACL.
Синтаксические EBNF правила
Компонент грамматического правила | Пример |
---|---|
Терминальные символы заключаются в двойные кавычки | "(" |
Нетерминальные символы пишутся с большой буквы | Expression |
Квадратные скобки ограничивают необязательные конструкции | [ "," OptionalArg ] |
Вертикальный разделитель обозначает альтернативные варианты | Integer ! Float |
Звездочка обозначает ноль или большее количество повторений предшествующего ей выражения | Digit* |
Плюс обозначает одно или большее количество повторений предшествующего ему выражения | Digit* |
Круглые скобки используются для расширения группы | ( A ! B )* |
Правило содержит в левой части нетерминальный символ, а в правой - выражение и заканчивается точкой | ANonTerminal = "terminal". |
0x?? - байт в шестнадцатеричном коде | 0x00 |
Синтаксис RBIL сообщения в EBNF форме в битовой нотации
Левая часть правила | Правая часть правила | Комментарий | |
---|---|---|---|
RBILCommunicativeAct | = | Message. | |
Message | = | Header MessageType MessageParameter* EndofMsg. | |
Header | = | MessageId Version. | |
MessageId | = | 0xFA | |
! | 0xFB | ||
! | 0xFC. | См. комментарий 1 ниже | |
Version | = | Byte. | См. комментарий 2 ниже |
EndofMsg | = | EndOfCollection. | |
EndOfCollection | = | 0x01. | |
MessageType | = | PredefinedMsgType | |
! | UserDefinedMsgType. | См. комментарий 3 ниже | |
UserDefinedMsgType | = | 0x00 MsgTypeName. | |
MsgTypeName | = | BinWord. | |
MessageParameter | = | PredefinedParam | |
! | UserDefinedMsgParam. | См. комментарий 4 ниже | |
UserDefinedMsgParam | = | 0x00 ParameterName ParameterValue. | |
ParameterName | = | BinWord. | |
ParamterValue | = | BinExpression. | |
PredefinedMsgType | = | 0x01 | accept-proposal |
! | 0x02 | agree | |
! | 0x03 | cancel | |
! | 0x04 | cfp | |
! | 0x05 | confirm | |
! | 0x06 | disconfirm | |
! | 0x07 | failure | |
! | 0x08 | inform | |
! | 0x09 | inform-if | |
! | 0x0a | inform-ref | |
! | 0x0b | not-understood | |
! | 0x0c | propagate | |
! | 0x0d | propose | |
! | 0x0e | proxy | |
! | 0x0f | query-if | |
! | 0x10 | query-ref | |
! | 0x11 | refuse | |
! | 0x12 | reject-proposal | |
! | 0x13 | request | |
! | 0x14 | request-when | |
! | 0x15 | request-whenever | |
! | 0x16. | subscribe | |
PredefinedMsgParam | = | 0x02 AgentIdentifier | sender (Отправитель сообщения) |
! | 0x03 RecipientExpr | receiver (Получатель(и)сообщения) | |
! | 0x04 MsgContent | content (Содержание сообщения) | |
! | 0x05 ReplyWithParam | reply-with (Метка исходящего сообщения) | |
! | 0x06 ReplyByParam | reply-by (Лимит времени на ответ) | |
! | 0x07 InReplyToParam | in-reply-to (Ссылка на входящее сообщение) | |
! | 0x08 ReplyToParam | reply-to (Получатель ответа на это сообщение в случае, если это не sender) | |
! | 0x09 Language | language (Язык сообщения) | |
! | 0x0a Encoding | encoding | |
! | 0x0b Ontology | ontology (Онтология) | |
! | 0x0c Protocol | protocol (Используемый протокол общения) | |
! | 0x0d ConversationID. | conversation-id (Идентификатор разговора) | |
AgentIdentifier | = | 0x02 AgentName | |
[Addresses] | |||
[Resolvers] | |||
(UserDefinedParameter)* | |||
EndOfCollection. | |||
AgentName | = | BinWord. | |
Addresses | = | 0x02 UrlCollection. | |
Resolvers | = | 0x03 AgentIdentifierCollection. | |
UserDefinedParameter | = | 0x04 BinWord BinExpression. | |
UrlCollection | = | (Url)* EndofCollection. | |
Url | = | BinWord. | |
AgentIdentifierCollection | = | (AgentIdentifier)* EndOfCollection. | |
RecipientExpr | = | AgentIdentifierCollection. | |
MsgContent | = | BinString. | |
ReplyWithParam | = | BinExpression. | |
ReplyByParam | = | BinDateTimeToken. | |
InReplyToParam | = | BinExpression. | |
ReplyToParam | = | RecipientExpr. | |
Language | = | BinExpression. | |
Encoding | = | BinExpression. | |
Ontology | = | BinExpression. | |
Protocol | = | BinWord. | |
ConversationID | = | BinExpression. | |
BinWord | = | 0x10 Word 0x00 | |
BinNumber | = | 0x12 Digits | Десятичное число |
! | 0x13 Digits. | Шестнадцатиричное число | |
Digits | = | CodedNumber+. | |
BinString | = | 0x14 String 0x00 | New string literal |
! | 0x15 Index | String literal from code table | |
! | 0x16 Len8 ByteSeq | New ByteLengthEncoded string | |
! | 0x17 Len16 ByteSeq | New ByteLengthEncoded string | |
! | 0x18 Index | ByteLengthEncoded from code table | |
! | 0x19 Len32 ByteSeq. | New ByteLengthEncoded string | |
BinDateTimeToken | = | 0x20 BinDate | Абсолютное время |
! | 0x21 BinDate | Относительное время (+) | |
! | 0x22 BinDate | Относительное время (-) | |
! | 0x24 BinDate TypeDesignator | Абсолютное время | |
! | 0x25 BinDate TypeDesignator | Относительное время (+) | |
! | 0x26 BinDate TypeDesignator. | Относительное время (-) | |
BinDate | = | Year Month Day Hour Minute Second 202 Millisecond. | См. комментарий 8 ниже |
BinExpression | = | BinExpr | См. комментарий 9 ниже |
! | 0xFF BinString. | ||
BinExpr | = | BinWord | |
! | BinString | ||
! | BinNumber | ||
! | ExprStart BinExpr* ExprEnd. | ||
ExprStart | = | 0x60 | Level down (i.e. ‘(’ –character) |
! | 0x70 Word 0x00 | Level down, new word follows | |
! | 0x71 Index | Level down, word code follows | |
! | 0x72 Digits | Level down, number follows | |
! | 0x73 Digits | Level down, hex number follows | |
! | 0x74 String 0x00 | Level down, new string follows | |
! | 0x75 Index | Level down, string code follows | |
! | 0x76 Len8 String | Level down, new byte string (1 byte) | |
! | 0x77 Len16 String | Level down, new byte string (2 byte) | |
! | 0x78 Len32 String | Level down, new byte string (4 byte | |
! | 0x79 Index. | Level down, new byte string (4 byte) | |
= | 0x79 Index. | Level down, byte string code follows | |
ExprEnd | = | 0x40 | Level up (i.e. ‘)’ –character) |
! | 0x50 Word 0x00 | Level up, new word follows | |
! | 0x51 Index | Level up, word code follows | |
! | 0x52 Digits | Level up, number follows | |
! | 0x53 Digits | Level up, hexadecimal number follows | |
! | 0x54 String 0x00 | Level up, new string follows | |
! | 0x55 Index | Level up, string code follows | |
! | 0x56 Len8 String | Level up, new byte string (1 byte) | |
! | 0x57 Len16 String | Level up, new byte string (2 byte) | |
! | 0x58 Len32 String | Level up, new byte string (4 byte) | |
! | 0x59 Index. | Level up, byte string code follows | |
ByteSeq | = | Byte*. | |
Index | = | Byte | |
! | Short. | См. комментарий 6 ниже | |
Len8 | = | Byte. | См. комментарий 7 ниже |
Len16 | = | Short. | См. комментарий 7 ниже |
Len32 | = | Long. | См. комментарий 7 ниже |
Year | = | Byte Byte. | |
Month | = | Byte. | |
Day | = | Byte. | |
Hour | = | Byte. | |
Minute | = | Byte. | |
Second | = | Byte. | |
Millisecond | = | Byte Byte. | |
Word | = | as in [FIPA00070] | |
String | = | as in [FIPA00070] | |
CodedNumber | = | См. комментарий 5 ниже | |
TypeDesignator | = | as in [FIPA00070] |
Комментарии к грамматическим правилам RBIL сообщения
- 1. Первый байт определяет идентификатор сообщения. Байт идентификатора может использоваться для того, чтобы разделять битовую нотацию RBIL сообщения от (например) текстовой нотации сообщений и отделять различные схемы кодирования. Идентификатор сообщения 0xFA определяет битовую нотацию без динамических таблиц, а идентификатор сообщения 0xFB определяет битовую нотацию с динамическими таблицами. Идентификатор сообщения 0xFC используется, когда динамические таблицы используются, но отправитель не хочет обновить динамические таблицы (даже если сообщение содержит строки, которые должны быть добавлены в кодовую таблицу).
- 2. Второй байт определяет номер версии. Байт номера версии содержит основной номер версии в верхних четырех битах, а минорный номер - в младших четырех битах. Эта спецификация определяет версию 1.0 (закодированную как 0x10).
- 3. Все типы сообщения, определенные в этой спецификации имеют предопределенный код. Если кодирующее устройство посылает RBIL сообщение с типом сообщения, который не имеет никакого предопределенного кода, нужно использовать механизм расширения, который добавляет новый тип сообщения в кодовую таблицу (если кодовые таблицы используются).
- 4. Все параметры сообщения, определенные в этой спецификации имеют предопределенный код. Если сообщение содержит определенный пользователем параметр сообщения, то используется механизм расширения (байт 0x00) и новый код добавляется в кодовую таблицу (если кодовая таблица используется).
- 5. Цифры закодированы в четырех битах ASCII - кодировки, то есть две цифры ASCII могут быть закодированы в один байт. Таблица 1 показывает 4 - битные коды для каждой цифры и специальные коды, которые могут появляться в ASCII кодировке чисел.
Если ASCII - представление числа содержит нечетное количество цифр, последние четыре бита закодированного числа устанавливаются в ноль (символ Padding), иначе дополнительный 0x00 байт будет добавлен к концу закодированного числа. Если число, которое будет закодировано - целое число, десятичное число, или восьмеричное число, используется байт 0x12 идентификатора. Для шестнадцатиричных чисел используется байт 0x13 идентификатора. Шестнадцатиричные числа перед кодированием конвертируются в целые числа (схема кодирования не позволяет символам больше f появляться в числе).
Символ | Код | Символ | Код |
---|---|---|---|
Padding | 0000 | 7 | 1000 |
0 | 0001 | 8 | 1001 |
1 | 0010 | 9 | 1010 |
2 | 0011 | + | 1100 |
3 | 0100 | E | 1101 |
4 | 0101 | - | 1110 |
5 | 0110 | . | 1111 |
6 | 0111 |
- 6. Индекс - это указатель на вход в кодовую таблицу, и его размер (битах) зависит от размера кодовой таблицы. Если размер кодовой таблицы - 256, размер индекса - один байт; иначе его размер - два байта (представленный в сетевом порядке байт).
- 7. Byte - однобайтовое кодовое слово, Short - короткое целое число (два байта, в сетевом порядке байт), Long - длинное целое число (четыре байта, в сетевом порядке байт).
- 8. Данные закодированы как числа, то есть четыре бита для каждоцифры ASCII (см. комментарий 5 выше). Информация, присутствует ли тип designator или нет, закодирована в байте идентификатора. Эти поля всегда имеют статическую длину (два байта в представлении года и миллисекунд, один байт для других компонентов).
- 9. Ничто из фактического содержания сообщения (информация, содержащаяся в параметре Content RBCL сообщения) не имеет кодов, добавленных в кодовую таблицу.