更大粒度的铁路图生成器?

时间:2013-04-02 07:15:09

标签: ebnf

是否有EBNF铁路发电机可以创建更大的块,而不是每个语法生成一个图表?

我已经尝试了http://bottlecaps.de/rr/ui并且它非常好:可以从W3C规范中删除EBNF语法(例如http://www.w3.org/TR/sparql11-query/),生成带有嵌入式SVG的单个XHTML,或者带有许多PNG的zip,交叉 - 链接定义和用法。

然而,SPARQL 1.1语法有173个产品。当每个产品有一个图表时,很难理解。我正在寻找像这样的东西:http://ontologicalengineering.blogspot.com/2008/12/sparql-railroad-diagram-from-hell.html

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。我最后写了一个快速而肮脏的vim脚本,将我的整个语法压缩成一个单独的作品。

质量较差的铁路图的问题在于它们会丢失一些更细粒度的标签。

对于EBNF的任何常规(IE:sans递归)子集,您只需查找并替换'右手边的左手边,直到它处于所需的形状。例如我压缩了:

Identifier ::= Letter AlphaNum*
Letter ::= [a-zA-Z]|[_]
NonZeroDigit ::= [1-9]
Digit ::= NonZeroDigit | [0]
AlphaNum ::= Letter|Digit

成:

Identifier ::= ([a-zA-Z]|[_]) (([a-zA-Z]|[_])|(([1-9])|[0]))*

具有预期的效果。

过程:

  1. 查找仅包含终端的规则(EG:Letter ::= [a-zA-Z]|[_])编辑:如果您找不到任何规则,只需选择任何规则,它仍然有效,但会导致稍微混乱的过程
  2. 将所有出现的左侧替换为括号内的右侧。
  3. 重复直到达到所需的粒度。
  4. 希望这有帮助!