Backus-Naur form이고 Backus Normal Form이라고도 불리는 약칭 BNF는 문맥 무관 문법
을 나타내기 위해 만들어진 표기법이다. 존 배커스와 페테르 나우르의 이름을 따서 부른다.
BNF는 기본적으로 다음의 문법을 따른다.
<기호> ::= <표현식>
말단 기호
가 될 수 없고, 표현식은 다른 기호의 조합, 또는 여러 가지의 표현식 중 하나를 사용한다는 의미로 |
을 사용한다.말단 기호
가 된다.::=
: 대입<>
: Nontermial의 유한집합으로 언어에 대한 계층적 구조를 부여하는 역할|
: Alternation으로 Or과 동일하다.<postal-address> ::= <name-part><street-address><zip-part>
<name-part> ::= <personal-part><last-name><opt-suffix-part><EOL>
| <personal-part><name-part>
<personal-part> ::=<first-name>|<initial> "."
<street-address> ::= <house-num><street-name><opt-apt-num><EOL>
<zip-part> ::= <town-name> "," <state-code><ZIP-code><EOL>
<opt-suffix-part> ::= "Sr." | "Jr." | <roman-numeral> | ""
<opt-apt-num> ::= <apt-num> | ""
noterminal
인 name-part
, street-address
, zip-part
의 유한집합입니다.<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<number> ::= <digit> | <number><digit>
digit
으로 정의할 수 있다.number
는 이런 digit
의 단일 개채일 수도 있고, Number
가 Recursive된 형태로 표현할 수 있다.
⇒ 이렇게 표현하면 몇자리의 숫자가 나와도 compiler에서 number라는 nonterminal로 인식 가능하다.사용 예에서 <opt-suffix-part>과 같이 더 이상 진행되지 않는 표현을 'terminal expression'이라고 부릅니다. 버스의 종착역인 터미널과 비슷합니다.