BNF

IT 위키
Backus-Naur Form; 배커스-나우르 표기법
프로그래밍 언어의 구문(문법)을 정의하기 위한 표기법
  • 존 배커스(John Backus)와 페테르 나우르(Peter Naur)가 ALGOL 60의 문법을 기술하기 위해 만들었다.
  • 언어를 기술하기 위한 언어이므로 메타 언어(meta language)라고 한다.
  • 문맥 자유 문법(Context-Free Grammar)을 적는 표준적인 방법이며, 컴파일러의 구문 분석기를 만들 때 쓴다.
기호 의미
::= 정의된다(is defined as). 왼쪽 기호를 오른쪽 형태로 정의한다
< > 비단말 기호(non-terminal). 더 정의되어야 할 이름을 감싼다
| 또는(or). 여러 대안을 구분한다
그 밖의 문자 단말 기호(terminal). 더 이상 분해되지 않고 그대로 나타나는 문자
<digit>   ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<number>  ::= <digit> | <number><digit>
<letter>  ::= a | b | c | … | z
<id>      ::= <letter> | <id><letter> | <id><digit>
  • `<number>`는 숫자 하나이거나, 숫자가 이어 붙은 형태다. 이렇게 자기 자신을 다시 쓰는 재귀로 반복을 표현한다.
  • 식별자는 문자로 시작하고 그 뒤에 문자나 숫자가 올 수 있다는 규칙을 위처럼 적는다.
Extended BNF

BNF는 반복과 선택을 재귀로만 표현할 수 있어 읽기 불편하다. EBNF는 기호를 더해 이를 간결하게 만든다.

기호 의미
{ } 0회 이상 반복
[ ] 생략 가능(선택)
( ) 그룹으로 묶음
<number> ::= <digit> { <digit> }
  • 위는 "숫자 하나 뒤에 숫자가 0개 이상 온다"는 뜻으로, 앞의 BNF 재귀 정의와 같은 의미다.
  • 구문 도표(Syntax Diagram)는 같은 내용을 그림으로 나타낸 것이다.

같이 보기

[편집 | 원본 편집]