WIPIVERSE

EBNF

정의
EBNF(Extended Backus–Naur Form)는 형식 언어의 문법을 기술하기 위해 사용되는 메타문법 표기법이다. 기존의 BNF(Backus–Naur Form)를 확장한 형태로, 선택, 반복, 옵션 등 보다 복잡한 구문 구조를 간결하게 표현할 수 있는 추가 기호들을 제공한다.

역사
BNF는 1950년대 말에 존 바크스(John Backus)와 피터 나우어(Peter Naur)가 프로그래밍 언어 FORTRAN의 구문을 기술하면서 제안하였다. 이후 1970년대 초에 BNF의 표현력을 보완하기 위해 여러 확장 표기법이 제안되었으며, 그 중 하나가 EBNF이다. 주요 표준으로는 ISO/IEC 14977 “Programming language syntax representation”이 있다.

주요 구성 요소

기호 의미 예시
::= 정의 연산자 (좌항을 우항으로 정의) `digit ::= "0"
` ` 선택 (alternatives)
[ ] 옵션 (선택적 항목) signed-number ::= [sign] number
{ } 반복 (0번 이상 반복) digits ::= { digit }
( ) 그룹화 `expr ::= term { ("+"
" " " 리터럴 문자열 "while"
... 범위 지정 (일부 표준) `letter ::= "a" ... "z"

활용 분야

  1. 프로그래밍 언어 설계 – 컴파일러와 인터프리터의 파서(generator) 자동 생성 도구에서 문법 정의에 사용된다.
  2. 데이터 포맷 기술 – XML, JSON 등 구조화된 데이터 형식의 스키마를 기술할 때 활용된다.
  3. 표준 문서 – ISO, IEC, IEEE 등에서 프로토콜·파일 포맷·프로그래밍 언어의 문법을 명시할 때 채택한다.

표준화
ISO/IEC 14977:1996은 EBNF의 공식 표준을 정의한다. 이 표준은 기호와 구문 규칙을 명확히 규정하여 다양한 구현체 간의 호환성을 확보한다.

관련 용어

  • BNF: EBNF의 기반이 되는 원시 표기법. 선택과 재귀만으로 문법을 표현한다.
  • ABNF: RFC 5234에서 정의된 Augmented BNF, 주로 인터넷 프로토콜 명세에 사용된다.
  • PEG(Parsing Expression Grammar): EBNF와 유사하지만, 결정적 파싱을 목표로 하는 다른 메타문법이다.

예시
다음은 간단한 산술 표현식 문법을 EBNF로 기술한 것이다.

expression   ::= term { ("+" | "-") term }
term        ::= factor { ("*" | "/") factor }
factor      ::= number | "(" expression ")"
number      ::= digit { digit }
digit       ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

위 정의는 숫자와 연산자를 포함한 수식의 구문 구조를 명확히 규정한다.

참고 문헌

  • ISO/IEC 14977, “Programming language syntax representation”, 1996.
  • A. P. Jacobs, “The Definitive ANTLR 4 Reference”, 2014. (EBNF를 활용한 파서 생성 도구 설명)

본 문서는 확인된 공식 자료와 표준에 근거하여 작성하였다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기