在整个 RDF 规范中,EBNF-NOTATION XML 规范用于指定文档的语法。所以我想知道如何使用 Antlr/bison/yacc (也许这些工具中的一些标志我不知道如何搜索)——或者我还不知道的其他工具——来使用这些规范并生成解析器供我在尝试加载之前查看 RDF 是否格式良好。
我的具体用例的示例语法是: https://www.w3.org/TR/n-quads/#sec-grammar
我已经将此语法转换为 Antlr4 语法,并使用该工具创建了一个解析器,并尝试编写自己的递归下降解析器,但它非常耗时,如果必须再次执行此操作,我宁愿不重复该练习。
实际上没有任何代码,这只是一个信息请求。
我想做的基本上是复制/粘贴此 XML EBNF-NOTATION 中指定的语法,并生成类似于 Antlr 提供的解析器生成器。
REx Parser Generator 根据 W3C 风格 EBNF 中的语法工作,Railroad Diagram Generator 可以直接从 W3C 文档中提取语法。
以下是如何从示例语法创建工作解析器(在 Java 中 - 也支持一些其他目标语言):
Get Grammar
选项卡上,输入示例 URL https://www.w3.org/TR/n-quadsEdit Grammar
WHITESPACE ::= [ #x9]+ /* ws: definition */
n-quads.ebnf
n-quads.ebnf
和命令行 -java -tree -main
n_quads.java
并编译它java n_quads -i a-sample-file
全面披露:我是 REx Parser Generator 的创建者和维护者。
使用工具将 EBNF 转换为您选择的解析器生成器的解析器生成器规范可能会更容易。
为此,您需要一个可以学习如何阅读 EBNF 的工具; 实际上,您可以通过写下 EBNF 的语法来教大多数解析器生成器。该工具还必须构建某种表示 EBNF 的语法树,您可以遍历/转换到目标 EBNF。 这是经典的代码生成......以及通常的问题,您必须指定树的形状,构建它,然后编写生成目标 BNF 所需的所有临时树遍历。
您可以将所有这些机器打包成一个包,作为程序转换系统(PTS)。 PTS通常包括解析器生成、树构建和模式导向的代码转换。然后你就可以专注于编写 EBNF 语法,以及编写源到源的翻译规则。
我们的
DMS 软件重组工具包可用于此目的。 我们对 DMS 做了类似的事情:即读取 XML DTD 描述并用 Java 合成高性能 XML 阅读器。