有没有办法从DTD生成一个BNF文件?

问题描述:

我一直有兴趣学习编写JetBrains plugin一段时间,现在和今天,我决定最后试一试。基本上,我为SVG文档添加了语言支持,因为内置的XML语言支持无法处理在SVG中使用名称空间xlink:的标记/属性。有没有办法从DTD生成一个BNF文件?

所以我正在通过我的方式通过custom language support tutorial,我已经到step 3.3 - define grammar。基本上我打算创建一个BNF文件来定义SVG文档中使用的语法。问题是,SVG语法将永远需要严格定义

我想要做的是从SVG Document Type Definition自动生成这个BNF文档,因为这个DTD应该包含足够的信息来完整定义SVG的语法(我假设)。

有没有办法将DTD转换为BNF?

+0

http://www.w3.org/XML/2000/04schema-hacking/dtd2bnf可能是一个很好的开始。 – bitfiddler

+0

@bitfiddler尝试但失败。该脚本没有关于如何使用它的文档,无论是在命令行还是在注释中。 –

我不知道任何现成的工具;如果您有任何XSLT技能,则可以直接使用将DTD转换为XML格式的各种工具(有时插入XSD或RNG,有时插入DTD结构的XML表示形式),然后编写XSLT转换转换为您需要的语法格式。

允许XML属性以任何顺序出现,但不包含重复的属性名称在BNF中相当乏味;您可以选择在软件的不同级别强制禁止使用重复的属性名称。