比如说我有一个自我描述的数据集。前几个结构良好的记录定义了数据类型 ID,其中包括记录的名称和长度,然后是内容记录,内容记录以数据 ID 开头并包含可变数量的数据,具体取决于 ID。
使用 BNF、EBNF 或 ABNF 来描述定义记录很容易......但是如何简洁地描述内容记录,其长度在定义记录中定义?
这是一个使用类似 BNF 的表示法描述经典 NetCDF 数据格式的示例,但并不简洁,因为在前面的定义中没有将 的长度指定为data
recs
数据的函数。dim
var
比如说我有一个自我描述的数据集。前几个结构良好的记录定义了数据类型 ID,其中包括记录的名称和长度,然后是内容记录,内容记录以数据 ID 开头并包含可变数量的数据,具体取决于 ID。
使用 BNF、EBNF 或 ABNF 来描述定义记录很容易......但是如何简洁地描述内容记录,其长度在定义记录中定义?
这是一个使用类似 BNF 的表示法描述经典 NetCDF 数据格式的示例,但并不简洁,因为在前面的定义中没有将 的长度指定为data
recs
数据的函数。dim
var
您是在问如何定义内容记录的内容?您明确表示它们已经根据数据量进行了定义。如果每个数据类型 ID 不仅意味着数据长度,还意味着数据结构,那么即使在 BNF 中,每个数据类型 ID 也有一组产生式,这很简单。你是这个意思吗?(它甚至可能是 LR(1)。)
我是一个名为 XTRAN 的专家系统的创建者,它可以处理 30 多种计算机语言以及数据和文本。我厌倦了编写解析器,所以我创建了一个在解析时执行 EBNF 的解析引擎,并通过专家系统的规则语言向它提供 EBNF。由于 EBNF 本身是元,我用来解析和存储它以在解析时执行的模式是元元。
XTRAN 的规则语言还提供数据库功能,其中数据库在内存中、内容可寻址并存储为稀疏矩阵。它实际上是一个 n 空间,每个单元格通过一个下标列表寻址,每个下标都被省略、整数或文本字符串。因此,我可以通过将数据描述存储在包含内容记录的同一数据库中来快速构建您描述的场景。它与通过自己的内容描述其模式的关系数据库大体相似。
FWIW,我们称 XTRAN 的规则语言元代码,因为它是一种可以操纵其他语言(以及它自己)的语言。