참고 : http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form , http://www.w3.org/TR/REC-xml/#sec-notation
1. 정의
컴퓨터 과학에서 Extended Backus-Naur Form(EBNF)는 메타구문 표기법 중에 하나로 context-free grammar(컴퓨터 프로그래밍 언어나 다른 포멀랭귀지를 정식으로 설명하는 방법)를 표현하는데 사용되어진다. Backus-Naur Form(BNF) 메타구문 기술법의 확장형이다.
- ISO는 EBNF를 표준으로 채택함(ISO/IEC 14977)
2. 기초
EBNF는 컴퓨터 언어의 문법을 설명하는 코드로 터미널심볼과 넌터미널 생성 규칙(어떤 방식으로 터미널심볼이 규칙에 맞는 순서로 조합될 수 있는지를 통제하는 제약사항)으로 구성되어 있다. 터미널심볼의 예로 알파누메릭 문자, 문장 부호 그리고 공백 문자들을 들 수 있다.
EBNF는 생성 규칙에 있어 심볼의 시퀀스 각각을 넌터미널에 할당하는 것으로 정의하고 있다.
digit excluding zero = “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” ;
digit = “0” | digit excluding zero ;
식의 왼편에 할당된 digit은 넌터미널로 정의 되고 수직바는 선택적임을 나타내며 터미널심볼은 인용부호로 감싸지며 뒤를잇는 세미콜론은 종료문자를 나타낸다. 그러므로 digit은 0이거나 1 또는 2 또는 3…. 또는 9까지의 수가 될 수 있는 digit excluding zero이다
생성 규칙은 연속되는 터미널 또는 넌터미널을 포함하며 각각은 콤마로 구분된다.
twelve = “1” , “2” ;
two hundred one = “2” , “0” , “1” ;
three hundred twelve = “3” , twelve ;
twelve thousand two hundred one = twelve , two hundred one ;
생략되거나 반복되는 것에 대한 표현은 중괄호를 통해 나타낼 수 있다 {…..}
natural number = digit excluding zero , { digit } ;
이경우는 첫째 자리는 1-9중 하나 뒷 자리는 없을 수도 혹은 중괄호의 값(0-9의 숫자)이 임의의 자릿수 만큼 반복될 수 있는것을 나타낸다.
임의 선택은 대괄호를 통해 나타낼 수 있다 […..] 이는 대괄호 안의 값이 단 한번 혹은 없을 수도 있다는 것을 나타낸다.
integer = “0” | [ “-” ] , natural number ;
그렇기 때문에 integer는 0이거나 -부호가 있거나 없는 natural number가 된다.
3. 심볼 테이블
용법 | 표기법 |
definition | = |
concatenation | , |
termination | ; |
alternation | | |
option | […] |
repetition | {…} |
grouping | (…) |
terminal string | … |
terminal string | ‘…’ |
comment | (*…*) |
special sequence | ?…? |
exception | – |
4. simple EBNF
XML의 정규문법은 simple EBNF표기법을 사용한다. 문법상 각 규칙은 형식상 하나의 심볼로 정의 되어진다.
symbol ::= expression
심볼은 정규 언어의 시작 기호인 경우 대문자 머릿글로 그렇지 않은 경우는 소문자 머릿글로 쓰여진다. 문자열이 표기된 그대로를 사용해야 할 경우 인용부호로 감싸서 표현한다. 오른 편에 표기된 식(expression)의 내부 아래에 소개될 규칙을 이용하여 단일 혹은 복수의 문자로 구성된 문자열과 매칭시키는데 사용되어진다.
#xN
N은 진수 정수이며 ISO/IEC 10646에서 정의 된 코드 포인트(예를 들자면 ASCII는 128 코드포인트로 구성되어 있고 범위는 0에서 7F까지이다)를 의미하며 식에서 표현하는 것은 N에서 정의된 문자와 일치한다.
[a-zA-Z], [#xN-#xN]
표기된 범위 내의 어떠한 문자도 포함 된다.
[abc], [#xN#xN#xN]
열거된 문자들 중 어떠한 문자라도 될 수 있고 열거형과 범위는 하나의 괄호셋으로 조합 될 수 있다.
[^a-z], [^#xN-#xN]
표기된 범위 이외의 어떠한 문자도 포함 된다.
[^abc], [^#xN#xN#xN]
열거된 문자가 아닌 어떠한 문자라도 될 수 있고 사용할 수 없는 값의 열거형과 범위는 하나의 괄호셋으로 조합 될 수 있다.
“string”
큰따옴표 안에 표기된 그대로의 문자열이 포함된다.
‘string’
작은따옴표 안에 표기된 그대로의 문자열이 포함된다.
이 심볼들은 다음의 좀더 복잡한 패턴들로 조합될 수 있다. A와 B는 간단한 식들을 나타낸다.
(expression)
expression은 단위로 취급 되며 다음 리스트에 설명된 것과 같이 조합될 수 있다.
A?
A이거나 혹은 없거나; 선택적 A
A B
A에 연이어 B가 따라옴. 이 연산자는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A B | C D 는 (A B) | (C D)로 볼 수 있다.
A | B
A이거나 혹은 B이거나
A – B
B를 제외한 A에 해당하는 어떠한 문자
A+
단일 혹은 복수개의 A. 이 연산자(concatenation)는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A+ | B+는 (A+) | (B+)로 볼 수 있다.
A*
0개 이거나 혹은 복수개의 A. 이 연산자(concatenation)는 |(alternation) 연산자보다 상위 우선순위를 갖는다; 예를 들면 A* | B*는 (A*) | (B*)로 볼 수 있다.
문서 생성시 사용되는 또다른 표기법은 다음과 같다.
/* … */
코멘트
[ wfc: … ]
적격성 제약; XML문서의 생성과 연관된 적격의 문서(wel-formed documents)에 대한 제약 사항을 이름을 통해 판별한다. (well-formedness constraint : XML 기본 문법을 위반하지 않았는지 여부에 대한 제약)
[ vc: …]
유효성 제약; XML문서의 생성과 연관된 유효한 문서(valid documents)에 대한 제약 사항을 이름을 통해 판별한다. (validity constraint : XML문서는 DTD에 문서에 대해 정의 되어 있는데 이것에 대한 위반 여부를 판단하는 제약)
Author Details
Linus Lee aka y1sh former ATiMania.com sysop during 2001-2012.
DevSecOps Engineer who likes tech, science, programming and solving problems 🙂