증강 배커스-나우르 형식
Augmented Backus–Naur form컴퓨터 과학에서 증강 배커스-나우르 형식(ABNF)은 배커스-나우르 형식(BNF)에 기초한 메타 언어이지만, 자체 구문 및 파생 규칙으로 구성됩니다.ABNF의 기본 원칙은 양방향 통신 프로토콜로 사용되는 언어의 공식 시스템을 기술하는 것입니다.2010년 12월[update] 현재 인터넷 표준 68("STD 68")에 정의되어 있습니다. RFC5234는 종종 IETF [1][2]통신 프로토콜의 정의 언어로 사용됩니다.
RFC 5234는 RFC 4234, 2234 및 733을 [3]대체합니다.RFC 7405에서는 스트링 리터럴을 지정하는 구문이 추가되어 대소문자가 구분됩니다.
개요

ABNF 사양은 다음과 같이 기술된 파생 규칙 집합입니다.
규칙 = 정의; 설명 CR LF
여기서 rule은 대소문자를 구분하지 않는 비말단입니다.정의는 규칙을 정의하는 기호 시퀀스, 문서용 주석, 캐리지 리턴 및 줄바꿈으로 끝납니다.
규칙 이름은 대소문자를 구분하지 않습니다.<rulename>
,<Rulename>
,<RULENAME>
,그리고.<rUlENamE>
모두 같은 규칙을 참조합니다.규칙명은 문자, 숫자 및 하이픈 뒤에 이어지는 문자로 구성됩니다.
꺾쇠 괄호(<
,>
(BNF에서와 같이) 규칙 이름 주변에는 필요하지 않습니다.그러나 산문에서 규칙 이름을 식별하기 위해 사용할 경우 규칙 이름을 구분하는 데 사용할 수 있습니다.
단말값
단자는 하나 이상의 숫자로 지정됩니다.
숫자 문자를 백분율 기호로 지정할 수 있습니다.%
, 그 다음에 베이스(b
= 이진,d
= 10진수 및x
= 16진수)에 이어 값 또는 값 연결(예:.
예를 들어 캐리지 리턴은 다음과 같이 지정합니다.%d13
십진법 또는 십진법으로%x0D
16진수로 표시됩니다.캐리지 리턴에 이어 라인 피드를 지정하면 다음과 같이 연결된다.%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 이상이고 줄바꿈이 허용됩니다.그LWSP
RFC5234 의 정의는, 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>
는 포함할 요소의 최대 수를 제공합니다(기본값은 무한).
사용하다*element
0개 이상의 요소에 대해*1element
0 또는 1개의 요소에 대해1*element
1개 이상의 요소에 대해2*3element
두세 가지 요소에 대해, cf. 정규 표현 e*
,e?
,e+
그리고.e{2,3}
.
특정 반복
nRule
요소의 명시적 수를 나타내려면, 양식은<a>element
사용되고 있으며, 이와 동등합니다.<a>*<a>element
.
사용하다2DIGIT
두 자리 숫자를 얻으려면3DIGIT
3자리 숫자를 얻습니다.(DIGIT
아래 "핵심 규칙"에 정의되어 있습니다.다음 예시의 우편 번호도 참조해 주세요.)
옵션 시퀀스
[Rule]
옵션 요소를 나타내려면 다음 구성이 동일합니다.
[fubar snafu]
*1(fubar snafu)
0*1(fubar snafu)
연산자 우선 순위
다음 연산자는 가장 엄격한 바인딩에서 가장 느슨한 바인딩까지 지정된 우선순위를 가집니다.
- 문자열, 이름 구성
- 댓글
- 값 범위
- 반복
- 그룹화, 옵션
- 연결
- 대안
대체 연산자를 연결과 함께 사용하는 것은 혼란스러울 수 있으며, 명시적인 연결 그룹을 만들기 위해 그룹화를 사용할 것을 권장합니다.
핵심 규칙

핵심 규칙은 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로, CHAR3는 prodo-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의 정의에 경고가 추가되어 있습니다.
이 선형 공백 규칙을 사용하면 메일 헤더에서 더 이상 유효하지 않으며 다른 컨텍스트에서 상호 운용성 문제가 발생한 공백만 포함하는 행을 허용합니다.메일 헤더를 정의할 때 를 사용하지 말고 다른 컨텍스트에서 주의하여 사용하십시오.
레퍼런스
- ^ "Official Internet Protocol Standards". RFC Editor. 2010-02-21. Archived from the original on 9 February 2010. Retrieved 2010-02-21.
- ^ Crocker, D.; Overell, P. (January 2008). "Augmented BNF for Syntax Specifications: ABNF" (plain text). RFC Editor. p. 16. Retrieved 2010-02-21.
- ^ "RFC Index". RFC Editor. 2010-02-19. Archived from the original on 9 February 2010. Retrieved 2010-02-21.
- ^ RFC 에러타 3096