EXPRESS 数据建模语言的自定义解析器

Custom Parser for EXPRESS data modeling language

我需要为 EXPRESS 编写一个自定义解析器 - 它被称为一种数据建模语言,用于为 CAD 软件定义和传递构造信息。 以下是一些资源:

https://en.wikipedia.org/wiki/EXPRESS_(data_modeling_language) https://www.loc.gov/preservation/digital/formats/fdd/fdd000449.shtml

好吧,我需要为此 "data modeling language" 设计一个自定义解析器。但是,我不知道在开始实现像样的解析器之前需要注意哪些细节。在决定如何解析它并以有意义的方式表示它之前,我应该以什么方式分析这种基于文本的格式?

关于此 "data modeling language" 及其语法,我特别需要了解哪些内容才能提出合理的解析器?

在 Backus-Naur-Form 中有 EXPRESS 语言的描述 on github. There are tools that take a description in BNF and generate a parser from it (for example bison or boost::spirit)。

这些将为您提供适用于该语言的有效文本解析器。下一步是为解析后的文本赋予意义。 EXPRESS 通常描述 class 层次结构和某些约束,因此您需要使用从解析器获得的标记对其进行建模。

您可能想看看现有的实现,例如 stepcode。他们有一个 EXPRESS 解析器,它采用 EXPRESS 模式并生成一个 STEP 解析器,它可以加载 EXPRESS 模式描述的文件。

您应该知道 EXPRESS 和 STEP 是非常强大和广泛的工具,因此您应该考虑 using/modifying 现有的实现而不是自己动手。

在这里您可以找到使用 Flex 和 Bison 实现的 C++ 解析器:oipExpress

有一个基于 in the EXPRESS2EMF 项目的解析器。但它还没有完成。目前它仍在跳过约束(又名 where 规则)和一些 IFC 规范中未使用的 EXPRESS 语言结构。