是否有一个 EBNF 铁路生成器可以创建更大的块,而不是每个语法生成一张图?
我已经尝试过 https://www.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
我也遇到这个问题了。我最终编写了一个快速而肮脏的 vim 脚本,将我的整个语法压缩为一个产品。
粒度较小的铁路图的问题在于,它们丢失了粒度较大的铁路图所赋予的一些标签。
对于 EBNF 的任何常规(即:无递归)子集,您只需用右侧“查找并替换”左侧,直到达到所需的形式。例如我压缩:
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]))*
达到了预期的效果。
流程:
Letter ::= [a-zA-Z]|[_]
)编辑:如果找不到任何规则,只需选择任何规则,它仍然有效,但会导致过程稍微混乱希望这有帮助!