2013-04-02 4 views
3

문법 작성 당 하나의 다이어그램이 아닌 더 큰 청크를 생성 할 수있는 EBNF 철도 발전기가 있습니까? 내가 http://bottlecaps.de/rr/ui을 시도하고 그것은 아주 좋은큰 입도 철도 다이어그램 발전기?

: W3C 사양에서 EBNF 문법을 긁어 수 있습니다 (예를 들어 http://www.w3.org/TR/sparql11-query/)는 임베디드 SVG 단일 XHTML, 또는 여러 PNG 파일, 크로스 링크 정의와 용도를 가진 우편 중 하나를 생성합니다.

그러나 SPARQL 1.1 문법에는 173 개의 프로덕션이 있습니다. 생산 당 하나의 다이어그램이있을 때 이해하기가 매우 어렵습니다. 나는 이것과 같이 덩어리로 만들어진 무언가를 찾고있다. http://ontologicalengineering.blogspot.com/2008/12/sparql-railroad-diagram-from-hell.html

답변

0

나는이 문제에 너무 빠져 들었다. 나는 전체 문법을 하나의 작품으로 압축하기 위해 빠르고 더러운 vim 스크립트를 작성했다.

덜 세분화 된 철도 다이어그램의 문제점은 좀 더 세분화 된 철도 다이어그램에서 주어진 일부 레이블링을 잃게된다는 것입니다.

EBNF의 일반 (IE : sans 재귀) 하위 집합의 경우 원하는 양식이 될 때까지 오른쪽에서 왼손 쪽을 '찾기 및 바꾸기'만하면됩니다. 예를 들어 I 압축 :

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]|[_] EG를) 포함하는 규칙을 찾아 당신이 어떤을 찾을 수없는 경우, 그냥 여전히 약간 지저분 과정
  2. 에 작동하지만 리드, 어떤 규칙을 선택
  3. 왼쪽 사이드의 모든 발생을 괄호로 묶인 오른쪽 사이드로 대체하십시오.
  4. 원하는 입도에 도달 할 때까지 반복하십시오.

희망이 있습니다.