2012-10-18 9 views
5

ASN.1 girişini Haskell ile nasıl ayrıştırabilirim?ASN.1 ile Haskell nasıl ayrıştırılır?

Belirli bir ASN.1 açıklama dosyası için cebirsel veri türü bildirimleri ve ayrıştırıcı kodu üretebilen bir jeneratör var mı?

Hızlı özeti (... C kodu üretmek için örneğin asn1c gibi) nasıl asn.1 hakkındadır:

asn.1 Google Protokol Tamponlar gibidir, ancak daha erken yol geliştirildi ve bu gerçek bir standarttır. Temel olarak ASN.1, hiyerarşik olarak yapılandırılmış verileri serileştirmek için çeşitli yöntemler ve yapıyı tanımlayan bir dilbilgisi tanımlamak için bir sözdizimi tanımlar. Böyle bir dilbilgisi, bir sözdizimi ağacı oluşturmak için otomatik olarak bir ayrıştırıcı ve veri yapıları oluşturmak için kullanılabilir.

cevap

3

Desen eşleştirmesi veya asn1-parse paketini kullanarak el ile ayrıştırabileceğiniz asn1-encoding paketini kullanarak ikili ASN.1 kodunu çözebilirsiniz.

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 
: Aşağıdaki yardımcı işlevi ASN1 bir liste halinde bir BER ikili dosyayı deşifre edecek Örneğin