在整个RDF规范中,使用EBNF-符号XML规范来指定文档的语法。因此,我想知道如何使用Antlr/bison/yacc (可能在这些工具中有一些标记,我不知道如何搜索),- or其他我还不知道的工具--使用这些规范并生成一个解析器,供我在尝试加载之前查看我的RDF是否格式良好。
我的特定用例的一个示例语法是:https://www.w3.org/TR/n-quads/#sec-grammar
我已经将此语法转换为Antlr4语法,并使用该工具创建了一个解析器,并试图只编写我自己的递归下降解析器,但这很费时,如果必须再次这样做,我不想重复这个练习。
没有真正的代码,这只是一个信息请求。
我想做的基本上是复制/粘贴这个XML表示法中指定的语法,并生成一个类似于Antlr提供的解析器生成器。
发布于 2019-05-15 20:50:06
REx分析器发生器使用W3C风格的EBNF从语法中工作,铁道图发生器可以直接从W3C文档中提取语法。
下面是如何从示例语法创建一个工作解析器(在Java中也支持其他一些目标语言):
Get Grammar选项卡上,输入示例URL https://www.w3.org/TR/n-quadsEdit GrammarWHITESPACE ::= [ #x9]+ /* ws: definition */n-quads.ebnfn-quads.ebnf和命令行-java -tree -mainn_quads.java并编译它java n_quads -i a-sample-file完全公开:我是REx解析生成器的创建者和维护者。
发布于 2019-05-08 19:31:10
使用工具将EBNF转换为解析器生成器规范可能更容易,因为解析器生成器是您选择的生成器。
要做到这一点,您需要一个可以教您读取EBNF的工具;实际上,您可能可以通过写下EBNF的语法来教大多数解析器生成器。
该工具还必须构建某种表示EBNF的语法树,您可以遍历/转换到目标EBNF。这是经典的代码生成..。与通常的问题一样,您必须指定树的形状,构建树,然后编写生成目标BNF所需的所有特殊树遍历。
您可以将所有这些机器打包成一个程序转换系统(PTS)。PTS通常包括解析器生成、树构建和模式定向代码转换.然后,您可以专注于编写EBNF语法,并编写源到源的翻译规则。
我们的DMS软件重组工具包可用于此。我们对DMS做了类似的工作:即读取XML描述并在Java中合成高性能的XML读取器。
https://stackoverflow.com/questions/56047642
复制相似问题