2013-04-02 35 views
3

是否有EBNF鐵路發電機可以創建更大的塊,而不是每個語法生產一個圖?更大粒度鐵路圖發電機?

我試過http://bottlecaps.de/rr/ui這是相當不錯的:能颳去W3C規範EBNF語法(如http://www.w3.org/TR/sparql11-query/),或者產生帶有嵌入SVG一個XHTML,或有許多PNG圖像,交聯的定義和用途有拉鍊。

但是,SPARQL 1.1語法有173個產品。每個產品有一張圖時,很難理解。我正在尋找像這樣一塊chunked:http://ontologicalengineering.blogspot.com/2008/12/sparql-railroad-diagram-from-hell.html

回答

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. 查找僅包含終端(例如:Letter ::= [a-zA-Z]|[_])的規則編輯:如果你不能找到任何,隨便挑任何規則,它仍然有效,但導致輕微混亂過程
  2. 用括號內的右側替換所有出現的左側。
  3. 重複,直到達到所需的粒度。

希望這會有所幫助!