Как разобрать ASN.1 с помощью Haskell?

Как анализировать ввод ASN.1 с помощью Haskell?

Существует ли генератор, способный генерировать объявления алгебраических типов данных и код синтаксического анализатора для заданного файла описания ASN.1?

(например, asn1c для генерации кода C...)

Краткий обзор того, что такое ASN.1:

ASN.1 похож на Google Protocol Buffers, но был разработан намного раньше и является фактическим стандартом. По сути, ASN.1 определяет несколько методов сериализации иерархически структурированных данных и синтаксис для определения грамматики, описывающей структуру. Такую грамматику можно использовать для автоматической генерации синтаксического анализатора и структур данных для построения синтаксического дерева.


person maxschlepzig    schedule 18.10.2012    source источник


Ответы (2)


Вы можете декодировать двоичный код ASN.1 с помощью пакета asn1-encoding, который вы можете анализировать либо вручную, используя сопоставление с образцом, или пакет asn1-parse.

Например, следующая вспомогательная функция декодирует двоичный файл BER в список ASN1:

import Data.ASN1.Encoding
import Data.ASN1.BinaryEncoding
import Data.ASN1.Types
import qualified Data.ByteString as B

decodeASN1File file = decodeASN1' BER `fmap` B.readFile file
person Tab    schedule 29.12.2013

Быстрый поиск Hackage показывает

http://hackage.haskell.org/package/language-asn1-0.2.1

что звучит так, как будто это может иметь значение. Я действительно мало знаю об ASN.1...

person MathematicalOrchid    schedule 18.10.2012