如何使用 W3C EBNF-Notation 并生成解析器生成器?

问题描述 投票:0回答:2

在整个 RDF 规范中,EBNF-NOTATION XML 规范用于指定文档的语法。所以我想知道如何使用 Antlr/bison/yacc (也许这些工具中的一些标志我不知道如何搜索)——或者我还不知道的其他工具——来使用这些规范并生成解析器供我在尝试加载之前查看 RDF 是否格式良好。

我的具体用例的示例语法是: https://www.w3.org/TR/n-quads/#sec-grammar

我已经将此语法转换为 Antlr4 语法,并使用该工具创建了一个解析器,并尝试编写自己的递归下降解析器,但它非常耗时,如果必须再次执行此操作,我宁愿不重复该练习。

实际上没有任何代码,这只是一个信息请求。

我想做的基本上是复制/粘贴此 XML EBNF-NOTATION 中指定的语法,并生成类似于 Antlr 提供的解析器生成器。

parsing rdf w3c ebnf
2个回答
12
投票

REx Parser Generator 根据 W3C 风格 EBNF 中的语法工作,Railroad Diagram Generator 可以直接从 W3C 文档中提取语法。

以下是如何从示例语法创建工作解析器(在 Java 中 - 也支持一些其他目标语言):

  • 浏览至铁路图生成器
  • Get Grammar
    选项卡上,输入示例 URL https://www.w3.org/TR/n-quads
  • 继续
    Edit Grammar
  • 在语法末尾添加空格规则:
    WHITESPACE ::= [ #x9]+ /* ws: definition */
  • 将语法保存到本地文件
    n-quads.ebnf
  • 浏览到REx解析器生成器
  • 使用输入文件
    n-quads.ebnf
    和命令行
    -java -tree -main
  • 保存生成的解析器
    n_quads.java
    并编译它
  • 在示例文件上运行解析器:
    java n_quads -i a-sample-file

全面披露:我是 REx Parser Generator 的创建者和维护者。


2
投票

使用工具将 EBNF 转换为您选择的解析器生成器的解析器生成器规范可能会更容易。

为此,您需要一个可以学习如何阅读 EBNF 的工具; 实际上,您可以通过写下 EBNF 的语法来教大多数解析器生成器。

该工具还必须构建某种表示 EBNF 的语法树,您可以遍历/转换到目标 EBNF。 这是经典的代码生成......以及通常的问题,您必须指定树的形状,构建它,然后编写生成目标 BNF 所需的所有临时树遍历。

您可以将所有这些机器打包成一个包,作为程序转换系统(PTS)。 PTS通常包括解析器生成、树构建和模式导向的代码转换。然后你就可以专注于编写 EBNF 语法,以及编写源到源的翻译规则。

我们的

DMS 软件重组工具包可用于此目的。 我们对 DMS 做了类似的事情:即读取 XML DTD 描述并用 Java 合成高性能 XML 阅读器。

© www.soinside.com 2019 - 2024. All rights reserved.