Construct是用 Python 实现的 DSL,用于描述数据结构(二进制和文本)。一旦你有了描述的数据结构,construct 就可以为你解析和构建它。哪个好(“DRY”、“Declarative”、“Denotational-Semantics”...)
使用示例:
# code from construct.formats.graphics.png
itxt_info = Struct("itxt_info",
CString("keyword"),
UBInt8("compression_flag"),
compression_method,
CString("language_tag"),
CString("translated_keyword"),
OnDemand(
Field("text",
lambda ctx: ctx._.length - (len(ctx.keyword) +
len(ctx.language_tag) + len(ctx.translated_keyword) + 5),
),
),
)
我需要这样的 Haskell 工具,我想知道这样的东西是否存在。
我知道:
- Data.Binary:用户分别实现解析和构建
- Parsec:仅用于解析?只为文字?
我想必须使用 Template Haskell 来实现这一点?