Computer Science/프로그래밍 언어론

BNF와 EBNF 표현 방법

Beomsu Koh 2023. 6. 12.

BNF 표현 방법

BNF (Backus-Naur Form)는 프로그래밍 언어의 형식적 정의(formal definition)을 위해 가장 널리 사용되는 방법입니다

이 표기법은 메타 기호(meta-symbol; 메타기호는 표현하려는 언어의 일부분이 아니라, 그 언어를 표현하려고 사용된 특수기호)로서 세 가지 기호를 사용합니다

  • 논터미널기호는<, > 로 묶어 표현
  • 대체(replacement)는 ::= 사용
  • 양자택일은 | 를 사용

예제 3.24 BNF로 표현하기 1


논 터미널 기호인 E,T,F는 각각 <E>, <T>, <F>로 나타난다.
→ 는 ::= 로 표시한다

P: <E> ::= <E> + <T> | <E> - <T> | <T> 
	<T> ::= <T> * <F> | <T> / <F> | <F> 
	<F> ::= (<E>) | id

예제 3.25 BNF로 표현하기 2

첫 번째 기호가 영문 소문자로 시작하고, 두 번째 기호부터는 영문 소문자나 숫자이며, 길이에 제한이 없는 식별자를 BNF 표기법으로 표현해보자.

<식별자> ::= <영문> | <식별자><영문> | <식별자><숫자>
<영문> ::= a | b | c | …| z 
<숫자> ::= 0 | 1 | 2 | …| 9

얼추 위와 같이 표현을 할 수 있지만, 완벽하지 않다. 길이에 제한이 없기 때문이다

정확히는 위와 같이 표현해야하는데, 엄청난 가지 수의 생성 규칙이 발생한다
이와 같이 BNF (Backus-Naur Form)는 반복 되는 부분을 표시하는데 어려움이 있다

EBNF 표현 방법

EBNF는 반복되는 부분을 BNF 표기법보다 읽기 쉽고 간결하게 표현한다
BNF 표기법의 세 가지 메타 기호에 반복을 나타내는 { }[]를 추가하여 사용한다

{a}는 a가 0번 이상 반복 될 수 있다는 것을 의미한다
정규표현 a*와 같은 의미로 생각하면 된다

또한, 선택적인 부분을 표시 할 때는 []로표현
[x]는 x가 나타나지 않거나 한 번 나타날 수 있음을 의미한다
[x]{x} 과 같은 의미이다

메타 기호를 terminal로 사용하는 경우, 그 기호를 작은 따옴표('')로 묶어 표현한다
{ }, [ ], |, < >), ::= 와 같이 EBNF에서 사용되어지는 메타기호를 터미널 기호로 사용하 는 경우 발생하는 혼돈을 피하기 위해서 사용한다

예제 3.27 EBNF로 표현하기 1

첫 번재 기호가 영문 소문자로 시작하고, 두 번째 기호부터는 영문 소문자나 숫자이며, 최대 8 글자인 식별자를 EBNF로 표현해보자

예제 3.28 EBNF로 표현하기 2

if 문장에서 else 부분이 선택적으로 나타날 수 있다면 다음과 같이 표현한다

<if_st> ::= if <condition> then <statement> [else <statement>]

예제 3.29 메타 기호를 터미널 기호로 사용하기

메타 기호 ::=와 |를 터미널 기호로 사용하는 경우에 대해 알아보자

<BNF_rule> ::= <left_part>'::='<right_part>
<right_part> ::= <right_part_elemnet>{'|'<right_part_element>}

위는 BNF 표현 방법을 EBNF로 표현하는 식이다.
이렇게 보니 EBNF 최고다…!

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글

매크로 함수와 인라인 함수  (0) 2023.06.14
유한 오토마타  (9) 2023.06.12
정규 표현  (0) 2023.06.12
정규 문법  (0) 2023.06.12
IEEE 802.11 프로토콜  (0) 2023.06.03

댓글