증강 배커스-나우르 형식

Augmented Backus–Naur form

컴퓨터 과학에서 증강 배커스-나우르 형식(ABNF)은 배커스-나우르 형식(BNF)에 기초메타 언어이지만, 자체 구문 및 파생 규칙으로 구성됩니다.ABNF의 기본 원칙은 양방향 통신 프로토콜로 사용되는 언어의 공식 시스템을 기술하는 것입니다.2010년 12월 현재 인터넷 표준 68("STD 68")에 정의되어 있습니다. RFC5234는 종종 IETF [1][2]통신 프로토콜의 정의 언어로 사용됩니다.

RFC 5234는 RFC 4234, 2234733[3]대체합니다.RFC 7405에서는 스트링 리터럴을 지정하는 구문이 추가되어 대소문자가 구분됩니다.

개요

ABNF syntax diagram of ABNF rules
ABNF 규칙의 ABNF 구문도

ABNF 사양은 다음과 같이 기술된 파생 규칙 집합입니다.

규칙 = 정의; 설명 CR LF

여기서 rule은 대소문자구분하지 않는 비말단입니다.정의는 규칙을 정의하는 기호 시퀀스, 문서용 주석, 캐리지 리턴 및 줄바꿈으로 끝납니다.

규칙 이름은 대소문자를 구분하지 않습니다.<rulename>,<Rulename>,<RULENAME>,그리고.<rUlENamE>모두 같은 규칙을 참조합니다.규칙명은 문자, 숫자 및 하이픈 뒤에 이어지는 문자로 구성됩니다.

꺾쇠 괄호(<,>(BNF에서와 같이) 규칙 이름 주변에는 필요하지 않습니다.그러나 산문에서 규칙 이름을 식별하기 위해 사용할 경우 규칙 이름을 구분하는 데 사용할 수 있습니다.

단말값

단자는 하나 이상의 숫자로 지정됩니다.

숫자 문자를 백분율 기호로 지정할 수 있습니다.%, 그 다음에 베이스(b= 이진,d= 10진수 및x= 16진수)에 이어 값 또는 값 연결(예:.예를 들어 캐리지 리턴은 다음과 같이 지정합니다.%d13십진법 또는 십진법으로%x0D16진수로 표시됩니다.캐리지 리턴에 이어 라인 피드를 지정하면 다음과 같이 연결된다.%d13.10.

리터럴 텍스트는 따옴표로 둘러싸인 문자열을 사용하여 지정합니다( )."이러한 문자열은 대소문자를 구분하지 않으며 사용되는 문자 집합은 (US-) ASCII입니다.따라서 문자열은"abc"는 "abc", "Abc", "aBc", "abC", "ABC", "ABC" 및 "ABC"와 일치합니다.RFC 7405에서는 대소문자를 구분하는 문자열의 구문이 추가되었습니다.%s"aBc""aBc"에만 일치합니다.그 이전에는 대소문자를 구분하는 문자열은 개개의 문자를 나열하는 경우에만 지정할 수 있었습니다. "aBc"와 일치하려면 다음과 같이 정의해야 합니다.%d97.66.99문자열은 대소문자를 구분하지 않고 명시적으로 지정할 수도 있습니다.%i프레픽스

연산자

공백

공백은 정의의 요소를 구분하는 데 사용됩니다. 공백이 구분 기호로 인식되려면 공백이 명시적으로 포함되어야 합니다.단일 공백 문자에 대한 명시적 참조는 다음과 같습니다.WSP(선형 공백) 및LWSP는 공백이 0 이상이고 줄바꿈이 허용됩니다.LWSPRFC5234 의 정의는, 2 개의 필드간에 딜리미터를 형성하기 위해서 적어도1 개의 공백 문자가 필요하기 때문에, 논란의[4] 여지가 있습니다.

정의는 왼쪽 정렬입니다.(가독성을 위해) 여러 줄이 필요한 경우 연속 행은 공백으로 들여씁니다.

댓글

; comment

세미콜론(;)는, 행의 마지막까지 코멘트를 개시합니다.

연결

Rule1 Rule2

규칙은 일련의 규칙 이름을 나열하여 정의할 수 있습니다.

문자열 "aba"를 일치시키려면 다음 규칙을 사용할 수 있습니다.

  • fu = %x61 ; a
  • bar = %x62 ; b
  • mumble = fu bar fu

대안

Rule1 / Rule2

규칙은 솔리더스로 구분된 대체 규칙 목록으로 정의할 수 있습니다./).

규칙 fu 또는 규칙 막대를 받아들이기 위해 다음 규칙을 구성할 수 있습니다.

  • fubar = fu / bar

증분 대체 방법

Rule1 =/ Rule2

다음을 사용하여 규칙에 다른 대안을 추가할 수 있습니다.=/규칙 이름과 정의 사이에 있습니다.

  • ruleset = alt1 / alt2
  • ruleset =/ alt3
  • ruleset =/ alt4 / alt5

따라서 와 동등하다.

  • ruleset = alt1 / alt2 / alt3 / alt4 / alt5

값 범위

%c##-##

숫자 값의 범위는 하이픈을 사용하여 지정할 수 있습니다( ).-).

  • OCTAL = %x30-37

와 동등하다

  • OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7"

시퀀스 그룹

(Rule1 Rule2)

요소를 괄호 안에 넣어 정의에서 규칙을 그룹화할 수 있습니다.

"a b d" 또는 "a c d"와 일치시키기 위해 다음 규칙을 구성할 수 있습니다.

  • group = a (b / c) d

"a b" 또는 "c d"에 일치시키기 위해 다음 규칙을 구성할 수 있습니다.

  • group = a b / c d
  • group = (a b) / (c d)

가변 반복

n*nRule

요소의 반복을 나타내려면, 양식<a>*<b>element사용됩니다.옵션<a>는 포함할 요소의 최소 수를 나타냅니다(기본값은 0).옵션<b>는 포함할 요소의 최대 수를 제공합니다(기본값은 무한).

사용하다*element0개 이상의 요소에 대해*1element0 또는 1개의 요소에 대해1*element1개 이상의 요소에 대해2*3element두세 가지 요소에 대해, cf. 정규 표현 e*,e?,e+그리고.e{2,3}.

특정 반복

nRule

요소의 명시적 수를 나타내려면, 양식은<a>element사용되고 있으며, 이와 동등합니다.<a>*<a>element.

사용하다2DIGIT두 자리 숫자를 얻으려면3DIGIT3자리 숫자를 얻습니다.(DIGIT아래 "핵심 규칙"에 정의되어 있습니다.다음 예시의 우편 번호도 참조해 주세요.)

옵션 시퀀스

[Rule]

옵션 요소를 나타내려면 다음 구성이 동일합니다.

  • [fubar snafu]
  • *1(fubar snafu)
  • 0*1(fubar snafu)

연산자 우선 순위

다음 연산자는 가장 엄격한 바인딩에서 가장 느슨한 바인딩까지 지정된 우선순위를 가집니다.

  1. 문자열, 이름 구성
  2. 댓글
  3. 값 범위
  4. 반복
  5. 그룹화, 옵션
  6. 연결
  7. 대안

대체 연산자를 연결과 함께 사용하는 것은 혼란스러울 수 있으며, 명시적인 연결 그룹을 만들기 위해 그룹화를 사용할 것을 권장합니다.

핵심 규칙

ABNF syntax diagram of core rules
핵심 규칙의 ABNF 구문 다이어그램

핵심 규칙은 ABNF 표준에 정의되어 있습니다.

규칙. 형식적 정의 의미.
알파 %x41~5A / %x61-7a 대소문자 ASCII 문자(A~Z, a~z)
숫자 %x30~39 십진수(0~9)
16진수 DIGIT / "A" / "B" / "C" / "D" / "E" / "F" 16진수(0~9, A~F, a~f)
견적서 %x22 큰따옴표
SP %x20 공간
HTAB %x09 가로 탭
WSP SP/HTAB 공간 및 수평 탭
LWSP *(WSP/CRLF WSP) 선형 공백(과거 줄 바꿈)
비디오 %x21~7E 표시(인쇄) 문자
문자 %x01~7F NUL을 제외한 임의의 ASCII 문자
옥텟 %x00–FF 8비트 데이터
CTL %x00 – 1F / %x7F 컨트롤
CR %x0D 캐리지 리턴
LF %x0A 라인 피드
CRLF CR LF 인터넷 표준 줄바꿈
조금 "0" / "1" 이진수

RFC 사양에서는 코어 규칙 다이어그램에서 CHAR2 문자 집합은 char-val로, CHAR3prodo-val로 삽입되어 있습니다.주요 구문 다이어그램에서 알기 쉽게 하기 위해 여기에 이름이 붙여졌습니다.

증강된 Backus-Naur 양식(ABNF) 페이지에 제시된 (미국) 우편 주소의 예는 다음과 같이 지정할 수 있습니다.

우편 주소   = 이름 부분 거리 지퍼 부품  이름 부분        = *(퍼스널 SP) 성씨 [SP 접미사] CRLF 이름 부분        =/ 퍼스널 CRLF  퍼스널    = 호칭의 / (초기의 ".") 호칭의       = *알파 초기의          = 알파 성씨        = *알파 접미사           = ("Jr." / "Sr." / 1*('나' / '브이' / 'X'))  거리           = [적절한 SP] 하우스 넘버전 SP 거리의 이름 CRLF 적절한              = 1*4숫자 하우스 넘버전        = 1*8(숫자 / 알파) 거리의 이름      = 1*비디오  지퍼 부품         = 타운 네임 "," SP  1*2SP 우편 번호 CRLF 타운 네임        = 1*(알파 / SP)             = 2알파 우편 번호         = 5숫자 ["-" 4숫자] 

함정

RFC 5234에서는 다음과 같이 LWSP의 정의에 경고가 추가되어 있습니다.

이 선형 공백 규칙을 사용하면 메일 헤더에서 더 이상 유효하지 않으며 다른 컨텍스트에서 상호 운용성 문제가 발생한 공백만 포함하는 행을 허용합니다.메일 헤더를 정의할 때 를 사용하지 말고 다른 컨텍스트에서 주의하여 사용하십시오.

레퍼런스

  1. ^ "Official Internet Protocol Standards". RFC Editor. 2010-02-21. Archived from the original on 9 February 2010. Retrieved 2010-02-21.
  2. ^ Crocker, D.; Overell, P. (January 2008). "Augmented BNF for Syntax Specifications: ABNF" (plain text). RFC Editor. p. 16. Retrieved 2010-02-21.
  3. ^ "RFC Index". RFC Editor. 2010-02-19. Archived from the original on 9 February 2010. Retrieved 2010-02-21.
  4. ^ RFC 에러타 3096