Backus Naur Form
........ 대부분의 프로그래밍 언어의 문법 (syntax) 를 묘사하는데 사용되는 문법 ...........
BNF (Backus-Naur form) ; BNF는 프로그래밍 언어를 정의하기 위한 최초의 메타 언어였다. ALGOL 58 언어의 구문 기술을 위해 1959년에 John Backus에 의해 처음 도입되었으며, Peter Naur에 의해 강화되어 ALGOL 60을 정의하는데 사용되었다. BNF는 구문 요소를 나타내는 기호 < >, 둘 중 하나의 선택을 의미하는 기호 ∥, 좌변은 우변에 의해 정의됨을 의미하는 기호 ::= 등의 메타 기호들을 사용하여 규칙을 표현한다. BNF의 원형은 원래 "Backus normal form"이었으나, Peter Naur의 이름을 넣어 오늘날과 같이 바뀌었다.
Backus-Naur form (BNF) (또는 Backus normal form 으로 알려져 있다) 은 문맥 자유 문법 (context free grammar) 을 표현하기 사용되는 형식적 metasyntax (문법을 위한 문법) 이다 : 즉 다른 형식 언어 (Formal Language) 를 묘사하는 하나의 형식적 방법이다. 그것은 컴퓨터 프로그램 언어, command sets 그리고 communication protocols 의 문법을 위한 표기법으로 널리 사용된다. 그러나 그것은 좀처럼 어데서도 문서화 되어있지 않아서, 조금씩 조금씩 배워나가는 수밖에 없다. 그 변형으로서 예를들면 ABNF 같은 것은 문서화 되어있다. 원래는 John Backus 가 명명하였지만 나중에 (Donald Knuth 가 제안하여) Peter Naur 의 이름이 추가되었다. 즉 Algol 60 을 위한 규칙을 창조한 것과 같이, 주로 컴파일러 설계 기술에 있어서, 둘다 컴퓨터과학의 개척자이다.
예제) 미국의 우편물 주소를 위해 BNF 를 사용해보자
<postal-address> ::= <name-part> <street-address> <zip-part>
<personal-part> ::= <name> | <initial> "."
<name-part> ::= <personal-part> <last-name> [<jr-part>] <EOL> | <personal-part> <name-part>
<street-address> ::= [<apt>] <house-num> <street-name> <EOL>
<zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>
이것을 영어로 번역하면 다음과 같다.
많은 것들 (personal-part, apartment specifier, ZIP-code 의 형식같은) 이 명기되어 있지 않다. 이러한 어휘적 디테일은 맥락을 보거나 가까이에 명기된 것으로부터 알 만한 것으로 추정된다.
변형 .......... BNF 의 많은 변형과 확장이 있는데, 예를들면 "*" or "+" 같은 regular expression 와일드 카드 같은 것들을 포함하고 있는 것들이다. Extended Backus-Naur form (EBNF) 도 흔히 사용되는 것이다. 위에서든 예제는 사실 ALGOL 60 을 위해 발명된 순수한 형태는 아니다. "[ ]" 은 몇 년후에 IBM 에서 PL/l 정의에 소개된 것으로 지금은 널리 인식되어 있다. Augumented BNF (ABNF) 는 또다른 확장이다. ................. (Wikipedia : Backus-Naur form)
BNF는 프로그래밍 언어를 정의하기 위한 최초의 메타 언어 (언어를 정의하기 위한 언어) 였다. ALGOL 58 언어의 구문 기술을 위해 1959년에 John Backus 에 의해 처음 도입되었으며, Peter Naur에 의해 강화되어 ALGOL 60을 정의하는데 사용되었다. BNF는 구문 요소를 나타내는 기호 < >, 둘 중 하나의 선택 (or) 을 의미하는 기호 |, 좌변은 우변에 의해 정의됨 (~로 정의됨) 을 의미하는 기호 ::= 등의 메타 기호들을 사용하여 규칙을 표현한다. BNF의 원형은 원래 "Backus normal form"이었으나, Peter Naur의 이름을 넣어 오늘날과 같이 바뀌었다. .............. (텀스 : BNF (Backus-Naur Form))
Backus-Naur 기호(보다 일반적으로 BNF나 Backus-Naur 폼)는 언어의 특징을 수학적으로 표현하는 방법입니다 ..... BNF는 수학적인 게임처럼 정렬됩니다. 당신은 기호(시작기호와 예제에서 보통 S라고 불리는)로 시작합니다. 그리고 규칙에 의해 이 기호들을 재배치 할 수 있습니다. BNF 문법으로 정의된 언어는 다음의 규칙들에 의해서만 모든 문자열을 생성할 수 있습니다. 이 규칙을 생성 규칙이라 부릅니다. 그리고 다음과 같습니다.
symbol := alternative1 | alternative2 ...
생성 규칙은 := 의 왼쪽에 있는 기호는 오른쪽에 있는 선택들 중 하나로 재배치 된다는 것으로 간단하게 나타납니다. 선택들은 | 로 구분됩니다. (여기서의 변화는 := 대신에 ::=을 사용하는 것입니다. 그러나 그 의미는 같습니다.) 선택들은 보통 기호와 터미널이라고 불리는 것으로 이루어집니다. 터미널은 기호가 아닌 마지막 문자열의 간단한 조각입니다. 이것을 위해한 생성 규칙이 없기 때문에 터미널이라고 부릅니다. 이것들은 생성 처리를 마칩니다. (기호들은 자주 non-terminal 이라고 불립니다.)
BNF 문법의 다른 변화는 기호들과 구별되는 인용 부호로 터미널을 둘러싸는 것입니다. 어떤 BNF 문법은 독자가 추론하기 위해 다른 문법들이 떠나는 동안 기호가 가지고 있는것에 의해 어디서 공백이 허용되는지를 분명하게 보여줍니다......
BNF에는 특별한 기호가 있습니다. @는 지울수 있는 기호라는 뜻을 가집니다. 당신이 @ 기호를 재정의 하려면 당신은 기호를 지우는 것으로 할수 있습니다. 이것은 어떤 경우에는 이 꽁수를 사용하지 않고는 재정의 처리를 끝내기가 어렵기 때문에 유용합니다.
그렇게 언어는 생성 규칙과 함께 당신이 생성할 수 있는 모든 문자열 집합의 문법에 의해 설명됩니다. 문자열이 규칙을 사용한 어떠한 방법으로도 생성할 수 없는 문자열이라면 언어에서 허용되지 않습니다. .................... (Gnome 한국 위키 : BNF)
term :
컴퓨터 (Computer) 언어 (Language) Backus Naur Form (BNF) John Backus Peter Naur
site :
Backus Normal Form vs. Backus Naur Form (long) : 두가지 이름과 관련된 역사
BNF and EBNF: What are they and how do they work?