2. EBNF(Extended BNF)¶
EBNF의 정의는 이곳 에서 확인해보시길 바랍니다.
2.1. EBNF의 필요성¶
EBNF와 같은 표준의 문법적 메타언어가 필요한 이유는 새롭게 생겨나는 프로그래밍 언어의 메타언어와 관련이 있습니다.
- 언어를 배울때마다 새로운 메타언어를 배워야 합니다.
- 새로운 메타언어는 결함을 갖을 수 있으며, 이를 이용해 완벽한 문법 정의가 어렵습니다.
- 새로운 메타언어는 특정 언어에 종속되어 있습니다.
- 새로운 메타언어에 관련된 도구가 부족합니다. 또는 모든 메타언어를 지원하는 도구를 작성하기 어렵습니다.
2.1.1. Don’t reinvent the wheel¶
기존에 개발된 최적의 방법이 있기 때문에, 다시 개발하는데에 시간을 낭비하지 말아야 한다는 뜻입니다. EBNF은 결함이 없으며, 개발자의 시간을 절약해 주는 메타언어라 할 수 있습니다.
2.2. BNF의 확장(extension)¶
BNF의 표현를 포함하여 확장된 표현은 다음과 같습니다.
- 싱글 쿼테이션 마크로 단말 심볼을 감싼다.
- [, ]로 옵션 심볼을 표현할 수 있다.
- {, }로 반복을 표현할 수 있다.
- 각각의 규칙은 명시적인 문자로 치환될 수 있어야 한다.
- 괄호는 항목들을 그룹 지어준다.
2.3. BNF의 한계¶
선형적인 언어를 정의할때만 사용할 수 있습니다. 그 외에도 복잡한 문법 표현이 어려울 수 있습니다. 이를 위해 EBNF 자체를 확장하는 방법을 제공하고 있습니다.
2.4. 문장(Sentence)¶
시작 심볼(start symbol)을 나타내는 심볼(Symbols)의 시퀀스를 뜻한다.
2.5. 시작 심볼(Start symbol)¶
다른 문법 규칙에는 등장하지 않는 비단말 심볼을 뜻한다.
2.6. 단말 심볼(Terminal symbol)¶
메타 식별자로 식별될 수 있으며, 1개 이상의 문자들의 시퀀스를 뜻한다. 더이상 쪼갤 수 없다.
2.7. 비 단말 심볼(Non-terminal symbol)¶
메타 식별자로 식별될 수 있으며, 언어의 문법적 부분을 뜻한다.
2.8. 메타 식별자(Meta-identifier)¶
비 단말 / 단말 심볼(Non-terminal symbol)의 이름을 뜻한다. 하이픈(-)으로 연결된 문자열이다. 단말 심볼의 식별자는 -symbol 로 끝난다.
2.9. 연산자 우선순위¶
- * repetition-symbol
- - except-symbol
- , concatenate-symbol
- | definition-separator-symbol
- = defining-symbol
- ; terminator-symbol
2.9.1. 문법과 문법 규칙(Syntax, Syntax-rule)¶
언어의 문법은 1개 이상의 문법 규칙으로 이루어져있다.
문법 규칙은 메타 식별자, 정의 심볼(defining-symbol), 정의 리스트(definitions-list)로 구성된다.
정의 리스트(definitions-list)는 |(definition-seperator-symbol)로 구분된 단일 정의(Single-definition)으로 구성된다.