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