2

我需要为 EXPRESS 编写一个自定义解析器——它被提到是一种数据建模语言,用于为 CAD 软件定义和传递构造信息。这里有几个资源:

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

好吧,我需要为这种“数据建模语言”提供一个自定义解析器。但是,我不知道在开始实现一个像样的解析器之前需要注意哪些细节。在决定如何解析并以有意义的方式表示之前,我应该以什么方式分析这种基于文本的格式?

关于这种“数据建模语言”及其语法,我特别需要了解什么,以便我可以提出一个合理的解析器?

4

3 回答 3

2

在 github 上的 Backus-Naur-Form 中有 EXPRESS 语言的描述。有一些工具可以在 BNF 中进行描述并从中生成解析器(例如bisonboost::spirit)。

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

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

你应该知道 EXPRESS 和 STEP 是非常强大和广泛的工具,所以你应该考虑使用/修改现有的实现而不是自己动手。

于 2018-07-10T06:51:17.753 回答
0

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

于 2018-07-11T19:02:00.280 回答
0

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

于 2020-11-27T20:38:53.583 回答