首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用W3C EBNF-符号并生成解析器生成器?

如何使用W3C EBNF-符号并生成解析器生成器?
EN

Stack Overflow用户
提问于 2019-05-08 19:18:22
回答 2查看 2.3K关注 0票数 6

在整个RDF规范中,使用EBNF-符号XML规范来指定文档的语法。因此,我想知道如何使用Antlr/bison/yacc (可能在这些工具中有一些标记,我不知道如何搜索),- or其他我还不知道的工具--使用这些规范并生成一个解析器,供我在尝试加载之前查看我的RDF是否格式良好。

我的特定用例的一个示例语法是:https://www.w3.org/TR/n-quads/#sec-grammar

我已经将此语法转换为Antlr4语法,并使用该工具创建了一个解析器,并试图只编写我自己的递归下降解析器,但这很费时,如果必须再次这样做,我不想重复这个练习。

没有真正的代码,这只是一个信息请求。

我想做的基本上是复制/粘贴这个XML表示法中指定的语法,并生成一个类似于Antlr提供的解析器生成器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-15 20:50:06

REx分析器发生器使用W3C风格的EBNF从语法中工作,铁道图发生器可以直接从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解析生成器的创建者和维护者。

票数 6
EN

Stack Overflow用户

发布于 2019-05-08 19:31:10

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

要做到这一点,您需要一个可以教您读取EBNF的工具;实际上,您可能可以通过写下EBNF的语法来教大多数解析器生成器。

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56047642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档