Компилятор ASN.1 с поддержкой Extended XER / RXER

#encoding #mapping #protocols #asn.1

#кодирование #отображение #протоколы #asn.1

Вопрос:

Я отчаянно ищу компилятор ASN.1, который успешно проанализирует предопределенное определение ASN.1, которое я получил от клиента.

Ни один из продуктов (бесплатных или коммерческих) до сих пор не смог проанализировать определение, основанное на XER и имеющее некоторую временную зависимость от RXER — когда я указываю соответствующие определения ASN.1 вручную (взятые из RFC), компилятор также выдает ошибки синтаксического анализа.

Соответствующая строка кода (упрощена):

 MYMSG ::= SEQUENCE
{
  msgID [ATTRIBUTE] [250] UTF8String OPTIONAL,
  msgType UTF8String
}
  

Каждый компилятор жалуется на токен [ATTRIBUTE], поэтому я обнаружил, что это часть спецификации ASN.X, определенной в RFC 4912, а также зависит от поддержки RXER в RFC 4910, см. Также X.680-1.

Проблема в том, что каждый компилятор, который я пробовал, похоже, не поддерживает эти схемы кодирования из коробки и не может проанализировать определения, упомянутые в RFC, например, для RXER и всех определений, которые используют эту кодировку, которую я получаю:

«RXER.asn», строка 20 (AdditionalBasicDefinitions): A1139W: Ссылка на кодировку по умолчанию ‘RXER’ для модуля ‘AdditionalBasicDefinitions’ неизвестна, и все инструкции по кодированию в модуле, идентифицируемом этой ссылкой на кодировку, будут проигнорированы.
ИНСТРУКЦИИ RXER

(Примечание: все зависимые модули, такие как ASN.X, включают инструкцию «RXER INSTRUCTIONS» сразу после тега «DEFINITIONS», который не понятен ни одному компилятору, который я пробовал).

Я попробовал openasn1 (www.openasn1.org ) — забавно то, что у меня есть несколько старых и частично функциональных объектов отображения Java в коде, который я получил, который был сгенерирован openasn1! — онлайн-компилятор на http://lionet.info/asn1c/asn1c.cgi и различные коммерческие инструменты, такие как Objective Systems ASN1C версии 6.4.1 на http://www.obj-sys.com/Cnge641Dwld/acv64kits.php (у них даже есть текущий плагин Eclipse), Marben http://www.marben-products.com/asn.1/tce_java.html и unigone http://www.unigone.com/en/products/Asn1Compiler/description

Я всегда получаю ошибку, похожую на эту:

 ASN.1 grammar parse error near line 13 (token "ATTRIBUTE"): parse error, unexpected TOK_capitalreference, expecting TOK_number
  

Я упускаю что-то очевидное, например, импорт или другие определения / флаги компилятора?

Комментарии:

1. Обновление: Служба быстрой поддержки Objective Systems только что сообщила мне (спасибо!), что «тег [ATTRIBUTE] является частью расширенной спецификации XER», которую, похоже, поддерживают не многие компиляторы. Кто-нибудь знает больше?

Ответ №1:

Мне удалось скомпилировать схему и сгенерировать необходимые классы отображения Java. Мне пришлось использовать коммерческий компилятор OSS Nokalva, поскольку все бесплатные инструменты, которые я пробовал, не работали с (E) схемами, закодированными XER. В полученной мной схеме также были некоторые ошибки, поэтому вот что мне пришлось сделать:

  1. сначала я добавил XER-инструкции в строку ОПРЕДЕЛЕНИЙ вместе с обычной директивой Tags:

    ОПРЕДЕЛЕНИЯ И ИНСТРУКЦИИ XER АВТОМАТИЧЕСКИ ПОМЕЧАЮТСЯ ТЕГАМИ ::=

  2. в нижнем колонтитуле я добавил директиву XER encoding:

    КОДИРОВАНИЕ-УПРАВЛЕНИЕ XER ГЛОБАЛЬНЫЕ ИЗМЕНЕННЫЕ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ-КОДИРОВКИ

  3. при использовании кодировки XER необходимо явно указывать теги, чтобы избежать двусмысленностей в синтаксисе:

    [АТРИБУТ] [ТЕГ: 0] вместо неоднозначного определения [АТРИБУТ] [0]

Все эти проблемы были решены, обратившись к этой замечательной статье о EXER-encoding, определенно хорошо прочитанной и спасибо Nokalva за эту полезную документацию!