【问题标题】:Bigger-granularity Railroad diagram generator?更大粒度的铁路图生成器?
【发布时间】:2013-04-02 07:15:08
【问题描述】:

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

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

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

【问题讨论】:

    标签: ebnf


    【解决方案1】:

    我也遇到了这个问题。我最终编写了一个快速而肮脏的 vim 脚本,将我的整个语法压缩到一个产品中。

    较少粒度的铁路图的问题在于,它们会丢失一些由较细粒度的铁路图赋予它们的标签。

    对于 EBNF 的任何常规(IE:无递归)子集,您只需将左侧“查找并替换”为右侧,直到它处于所需的形式。比如我压缩了:

    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. 查找仅包含终端的规则(例如:Letter ::= [a-zA-Z]|[_])编辑:如果找不到,请选择任何规则,它仍然有效,但会导致流程稍微混乱
    2. 用括号括起来的右侧替换所有出现的左侧。
    3. 重复直到达到所需的粒度。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2010-11-23
      • 2016-02-15
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 2011-02-09
      相关资源
      最近更新 更多