我需要为EXPRESS编写一个自定义解析器-提到它是一种数据建模语言,用于定义和传递CAD软件的构造信息。 这是几个资源:
https://en.wikipedia.org/wiki/EXPRESS_(data_modeling_language) https://www.loc.gov/preservation/digital/formats/fdd/fdd000449.shtml
嗯,我需要为这种“数据建模语言”提供一个自定义解析器。但是,我不知道在开始实现体面的解析器之前我需要注意哪些细节。在决定如何解析并以有意义的方式表示之前,我应该以哪种方式分析这种基于文本的格式?
对于这种“数据建模语言”及其语法,我特别需要了解什么,以便我能提出一个合理的解析器?
答案 0 :(得分:1)
在Backus-Naur-Form on github中有对EXPRESS语言的描述。有一些工具会在BNF中进行描述并从中生成解析器(例如bison或boost::spirit)。
这些将为您提供该语言的有效文本解析器。下一步是给解析后的文本一个含义。 EXPRESS通常描述类的层次结构和某些约束,因此您将需要使用从解析器获得的令牌对其进行建模。
您可能想看看现有的实现,例如stepcode。它们具有一个EXPRESS解析器,该解析器采用EXPRESS模式,并生成一个STEP解析器,可以加载由EXPRESS模式描述的文件。
您应该知道EXPRESS和STEP是非常强大且功能强大的工具,因此您应该考虑使用/修改现有的实现方式,而不是滚动自己的实现方式。
答案 1 :(得分:0)
在这里您可以找到使用Flex和Bison实现的C ++解析器:oipExpress
答案 2 :(得分:0)
在xtext项目中有一个基于EXPRESS2EMF的解析器。虽然还没有完成。目前,它仍在跳过IFC规范中未使用的约束(又称规则)和一些EXPRESS语言构造。