확장 배커스-나우르 형식
Extended Backus–Naur form컴퓨터 과학에서 확장 배커스-나우르 형식(EBNF)은 문맥이 없는 문법을 표현하기 위해 사용될 수 있는 메타세 표기 패밀리이다.EBNF는 컴퓨터 프로그래밍 언어와 같은 정식 언어를 기술하기 위해 사용됩니다.기본 Backus-Naur 형식(BNF) 메타 비동기식 표기법의 확장입니다.
최초의 EBNF는 Niklaus Worth가 Worth 구문 표기법과 (다른 구문과 표기법으로) 일부 개념을 통합하여 개발하였다.단, 많은 종류의 EBNF가 [1]사용되고 있습니다.국제 표준화 기구는 1996년에 EBNF 표준(ISO/IEC 14977)을 채택했습니다.그러나 Zaytsev에 따르면 이 표준은 "혼돈에 또 다른 세 가지 사투리를 추가했을 뿐"이며, 성공적이지 못한 점을 지적한 후 ISO EBNF가 모든 ISO 표준에서 사용되는 것은 아니라는 점도 지적하고 있습니다.Wheeler는 EBNF를 사용할 때 ISO 표준을 사용하는 것을 반대하며 W3C Extensible Markup Language(XML) 1.0(5번째 에디션)의 표기 등 대체 EBNF 표기법을 검토할 것을 권장합니다.
이 문서에서는 모든 EBNF에 적용되는 예로서 ISO에서 규정하는 EBNF를 사용합니다.다른 EBNF 바리안트에서는 다소 다른 구문 규칙을 사용합니다.
기본
EBNF는 정식 언어의 [2]구문을 나타내는 코드입니다.EBNF는 단말기 심볼과 비단말기 생산규칙으로 구성되며, 이는 단말기 심볼을 법적 시퀀스로 결합하는 방법을 결정하는 제한사항이다.터미널 기호의 예로는 영숫자, 구두점 및 공백 문자가 있습니다.
EBNF는 심볼 시퀀스가 각각 비단말기에 할당되는 생산 규칙을 정의합니다.
0을 제외한 숫자= "1" "2" "3" "4" "5" "6" "7" "8" "9" ; 숫자= "0" 0을 제외한 숫자;
이 생산 규칙은 할당 왼쪽에 있는 터미널 이외의 숫자를 정의합니다.세로 막대는 대체 문자를 나타내며, 종단 기호는 끝 문자로 세미콜론 뒤에 따옴표로 둘러싸여 있습니다.따라서 0 또는 0을 제외한 숫자이며 1 또는 2 또는 3이 될 수 있으며 9까지 계속됩니다.
프로덕션 규칙에는 쉼표로 구분된 일련의 터미널 또는 비터미널을 포함할 수도 있습니다.
12= "1", "2" ; 211= "2", "0", "1" ; 312= "3", 12; 만이천이백일= 12, 211;
생략하거나 반복할 수 있는 식은 중괄호 {...}로 표시할 수 있습니다.}:
자연수= 0을 제외한 숫자, { 숫자} ;
이 경우 문자열 1, 2, ..., 10, ..., 10000, ...이 올바른 표현입니다.이를 나타내기 위해 중괄호 안에 설정되어 있는 모든 것을 임의로 반복할 수 있습니다(전혀 반복할 수 없습니다).
옵션은 대괄호 [...]로 표시할 수 있습니다.즉, 대괄호 안에 설정된 모든 것은 한 번만 표시되거나 아예 표시되지 않을 수 있습니다.
정수= "0" [ "-" ], 자연수;
따라서 정수는 제로(0) 또는 자연수이며, 옵션의 마이너스 기호 앞에 붙을 수 있습니다.
또, EBNF 는, 특히, (지정 회수의) 반복을 기술해, 생산의 일부를 제외해, EBNF 문법에 코멘트를 삽입하는 구문도 제공합니다.
기호표
다음은 R. S. Scowen(7페이지, 표 1)에 의해 제안된 ISO/IEC 14977 표준을 나타냅니다.
사용. | 표기법 |
---|---|
정의. | = |
연결 | , |
종료 | ; |
교대. | |
선택적. | [ ... ] |
반복 | { ... } |
그룹화 | ( ... ) |
단말 문자열 | " ... " |
단말 문자열 | ' ... ' |
댓글 | (* ... *) |
특수 시퀀스 | ? ... ? |
예외. | - |
예
구문도
EBNF
EBNF도 EBNF를 사용하여 기술할 수 있습니다.아래에 스케치된 문법을 고려하십시오.
편지= "A" 'B' 'C' 'D' 'E' 'F' 'G' 'H' '나' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' '브이' 'W' 'X' 'Y' 'Z' "a" "b" "c" "d" "e" "f" "g" "h" '나' "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" ; 숫자= "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ; 기호.= "[" "]" "{" "}" "(" ")" "<" ">" "'" '"' "=" " " "." "," ";" ; 성격= 편지 숫자 기호. "_" ; 식별자= 편지, { 편지 숫자 "_" } ; 단말= "'" , 성격, { 성격} , "'" '"' , 성격, { 성격} , '"' ; lhs= 식별자; rhs= 식별자 단말 "[" , rhs, "]" "{" , rhs, "}" "(" , rhs, ")" rhs, " " , rhs rhs, "," , rhs; 규칙.= lhs, "=" , rhs, ";" ; 문법.= { 규칙.} ;
파스칼
할당만 허용하는 Pascal과 같은 프로그래밍 언어는 다음과 같이 EBNF에서 정의할 수 있습니다.
(*EBNF의 간단한 프로그램 구문 - Wikipedia *) 프로그램.= 프로그램, 여백, 식별자, 여백, '시작', 여백, { 과제, ";", 여백}, '끝' ; 식별자= 알파벳 문자, { 알파벳 문자 숫자} ; 번호= [ "-" ], 숫자, { 숫자} ; 스트링= '"' , { 모든 문자 -'"' }, '"' ; 과제= 식별자, ":=" , ( 번호 식별자 스트링) ; 알파벳 문자= "A" 'B' 'C' 'D' 'E' 'F' 'G' 'H' '나' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' '브이' 'W' 'X' 'Y' 'Z' ; 숫자= "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" ; 여백= ? 공백 문자? ; 모든 문자= ? 보이는 모든 문자? ;
예를 들어 구문적으로 올바른 프로그램은 다음과 같습니다.
프로그램. 데모 1 시작한다. A:=3; B:=45; H:=-100023; C:=A; D123:=B34A; 개코원숭이:=기린; 본문:="안녕 세계!"; 끝..
제어 흐름, 산술식 및 입출력 명령을 사용하여 언어를 쉽게 확장할 수 있습니다.그러면 작고 사용 가능한 프로그래밍 언어가 개발될 것이다.
BNF에 대한 이점
EBNF에서 정의된 문법은 BNF에서도 나타낼 수 있지만 일반적으로 후자의 표현은 더 길다.예: 옵션과 반복은 BNF로 직접 표현할 수 없으며, 0으로 정의된 중간 규칙 또는 옵션 생산 또는 반복을 위한 반복적 생산의 사용을 요구한다.EBNF에서도 같은 구조를 사용할 수 있습니다.
BNF는 기호(<
,>
,
,::=
)는, 그 자체를 대상으로 하고 있습니다만, 터미널 스트링의 주위에 따옴표는 포함하지 않습니다.이렇게 하면 언어에서 이러한 문자가 사용되지 않으며 빈 문자열에 대한 특수 기호가 필요합니다.EBNF에서는 단말기는 따옴표 안에 엄밀하게 둘러싸여 있습니다."
..."
또는'
...'
꺽쇠 괄호("")<
…>
)의 경우는 생략할 수 있습니다.
BNF 구문은 한 줄의 규칙만 나타낼 수 있는 반면 EBNF에서는 끝 문자인 세미콜론 문자 " "를 사용할 수 있습니다.;
"는 규칙의 끝을 나타냅니다.
또한 EBNF는 대안, 코멘트 등을 제외한 반복 횟수를 정의하는 개선 메커니즘을 포함한다.
관습
- ISO/IEC 14977 표준의 섹션 4에 따라 다음 표기법이 사용됩니다.
- 확장 BNF의 각 메타 식별자는 하이픈으로 결합된1개 이상의 단어로 작성됩니다.단, 단어의 결합은 표준의 예에서 볼 수 있듯이 메타 언어 자체의 외부 메타 식별자를 참조할 때만 적용되는 것으로 보인다.
- -symbol로 끝나는 메타 식별자는 확장 BNF의 단말기 기호 이름입니다.
- 확장 BNF 의 각 연산자와 그 암묵적인 우선도를 나타내는 통상의 문자는, 다음과 같습니다(상단에서 가장 높은 우선도).
* 반복 검출된 - 예외적인 , 연결 매개성의 디피니션, 디피니션, 디피니션, 디피니션 = 정의의 대상 ; 터미네이터 매개체 . 터미네이터 매개체
- 일반 우선순위는 다음 브래킷 쌍에 의해 덮어씁니다.첫 번째 따옴표 심볼은 ISO/IEC 646:1991에서 정의된 아포스트로피(Unicode U+0027)입니다.
(* start-discription-end-discription*) ' 첫 번째, 두 번째, 두 번째' ( start-group-module end-group-module) [ start-option-module end-option-module] { start-syslog-end-syslog-syslog} ? 특수 배열 매개체? " 세컨드-세컨드 포트"
'
); ISO/IEC 14977:1996(E)에서 사용되는 글꼴은 Unicode U+00B4와 매우 유사합니다(´
그래서 혼란이 생길 수 있습니다.단, ISO 확장 BNF 표준은 ISO/IEC 646:1991, "정보 교환을 위한 ISO 7비트 부호화 문자 집합"을 표준 참조로 호출하고 다른 문자 집합을 언급하지 않으므로, 형식적으로 7비트 ASCII 범위 밖의 유니코드 문자와 혼동하지 않는다.
예를 들어, 다음 구문 규칙은 반복 표현 기능을 나타냅니다.
aa= "A"; bb= 3 * aa, 'B'; 참조= 3 * [aa], 'C'; dd= {aa}, 'D'; 이= aa, {aa}, 'E'; ff= 3 * aa, 3 * [aa], 'F'; gg= {3 * aa}, 'G';
이러한 규칙에 의해 정의되는 단말 문자열은 다음과 같습니다.
aa: a bb: AAAB cc: C AC AAAC dd: D AD AAAD AAAD 등ee: AE AAAE AAAAE AAAAAE 등 f: AAAF AAAAAAAF AAAAAAAF gg: GAAAG AAAAAAAG 등.
확장성
ISO 14977 표준에 따르면 EBNF는 확장성이 있어야 하며 두 가지 설비가 언급되어 있습니다.첫 번째는 물음표로 둘러싸인 임의의 텍스트인 EBNF 문법의 일부입니다.특수 시퀀스 내의 텍스트 해석은 EBNF 표준의 범위를 벗어납니다.예를 들어, 공백 문자는 다음 규칙으로 정의할 수 있습니다.
공간= ASCII 문자 32?;
확장의 두 번째 기능은 EBNF의 괄호를 식별자 옆에 배치할 수 없다는 사실을 사용합니다(각 괄호는 식별자와 연결해야 합니다.유효한 EBNF는 다음과 같습니다.
뭔가= 후우, ( 막대기);
다음은 유효한 EBNF가 아닙니다.
뭔가= 후우( 막대기);
따라서 EBNF의 확장에서는 이 표기를 사용할 수 있습니다.예를 들어 Lisp 문법에서는 함수 어플리케이션은 다음 규칙에 의해 정의될 수 있습니다.
기능 응용= 목록.( 기호., { 표현} );
관련 작업
- W3C는 EBNF 표기를 공개합니다.
- W3C는 XML 구문을 지정하기 위해 다른EBNF를 사용했습니다.
- 영국표준협회는 1981년에 EBNF: BS 6154에 대한 표준을 발표했다.
- IETF 에서는, 에 지정되어 있는 증강 BNF(ABNF)가 사용됩니다. RFC5234.
「 」를 참조해 주세요.
- Meta-II – 초기 컴파일러 쓰기 도구 및 표기법
- 구문 구조 규칙 – 자연어로 EBNF와 직접 동등한 값
- 정규 표현
- Spirit 파서 프레임워크
레퍼런스
- ^ Zaytsev, Vadim (March 26–30, 2012). "BNF Was Here: What Have We Done About the Unnecessary Diversity of Notation for Syntactic Definitions?" (PDF). Proceedings of the 27th Annual ACM Symposium on Applied Computing (SAC '12). Riva del Garda, Italy. p. 1.
- ^ Pattis, Richard E. "EBNF: A Notation to Describe Syntax" (PDF). ICS.UCI.edu. University of California, Irvine. p. 1. Retrieved 2021-02-26.
외부 링크
- ISO/IEC 14977 : 1996 (E)
- BNF/EBNF 바리안트– 여러 구문을 비교한 Pete Jinks 표