2014-11-03 6 views
2

"imsxeADSUXju"문자가 포함 된 ABNF 규칙을 만들려고합니다. 각 문자는 선택 사항입니다. 순서는 중요하지 않지만 한 번 이상 등장하지 않을 수도 있습니다.ABNF에서 중복 문자 방지

예 : 그것은

"i" "im" "mi" "" "uUsejXx" "imsxeADSUXju" 

일치해야하지만하지

"iim" "UmUu" "imsss" 

나는 다음과 같은 규칙을 만들어 일치하지만 나타나는 문자를 방지하지 않습니다 번 이상 :

options = 0*12("i"/"m"/"s"/"x"/"e"/"A"/"D"/"S"/"U"/"X"/"j"/"u") 

이 규칙에서 주문의 중요성 :

options = [ "i" ] [ "m" ] [ "s" ] [ "x" ] [ "e" ] [ "A" ] [ "D" ] [ "S" ] [ "U" ] [ "X" ] [ "j" ] [ "u" ] 

주문을 무시하지만 복식을 금지하는 규칙을 작성하려면 어떻게해야합니까?

+0

재귀 규칙처럼 이미 본 문자 배열을 사용하고 규칙에이 배열을 불일치로 패딩 했습니까? 나는 ABNF를 정말로 잘 모릅니다.하지만 이것은 가치있는 것을 시험해보기 위해 마음에 들어옵니다. 미안해. – Eregrith

답변

3

불행히도 모든 대안을 작성해야합니다. ABNF는 대소 문자를 구분 것을 무시, 그것은

S  = "i" after-i/
      "m" after-m/
      ... 
    after-i = "m" after-im/
      "s" after-is/
      ... 
    after-im = "s" after-ims/
      ... 

될 것이다 여기에 언어는 정기적으로, 당신은 최소한의 DFA의 모습 언어를 들어, 2^12 개 주를해야하는 방법을 고려하는 경우 각 상태는 문자의 어느 것이 이미 보았는지를 인코딩하는 알파벳의 powerset 요소에 해당합니다.