在整个 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 中 - 也支持一些其他目标语言):
- 浏览至 Railroad Diagram Generator
- 在
获取语法
选项卡上,输入示例 URL https://www.w3.org/TR/n-quads - 继续
编辑语法
- 在语法末尾添加空格规则:
WHITESPACE::= [ #x9]+/* ws: 定义 */
- 将语法保存到本地文件
n-quads.ebnf
- 浏览至 REx Parser Generator
- 使用输入文件
n-quads.ebnf
和命令行-java -tree -main
- 保存生成的解析器
n_quads.java
并编译它 - 在示例文件上运行解析器:
java n_quads -i a-sample-file
全面披露:我是 REx Parser Generator 的创建者和维护者。
关于parsing - 如何使用 W3C EBNF-Notation 并生成解析器生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56047642/