Programming/Computer Science Fundamentals

[프로그래밍 언어론] BNF를 EBNF로 변환하는 방법 (4장 보충)

Sujin Lee (Daisy) 2021. 10. 4. 01:43

BNF → EBNF 변환 방법 

BNF EBNF
<N> :: A | AB <N> ::= A [B] 
<Q> :: - <num> | <num> <Q> ::= [-] <num>
<P> ::= <P> A | A <P> ::= A { A } 
<X> :: <X> A | ϵ <X> ::= { A }
<blk> ::= begin <sts> end
<sts> ::= <cmd> | cmd ; <sts>
<blk> ::= begin <cmd> { ; <cmd> } end
<nws> ::= + <num> | - <num> <nws> ::= ( + | - ) <num>
<SN> ::= + <num> | - <num> | <num> <SN> ::= [ ( + | - ) ]  <num>

 

 

[ EBNF로 변환할 때 주의점 ]

1. 대부분의 | 는 제거된다.

2. 중복되는 요소가 하는 일이 오직 조건을 구체화하는 것이라면, 그것들은 제거된다.  

3. 대부분의 재귀적 요소는 제거되고 { } 루프로 대체된다. 

4. null을 뜻하는 입실론(ϵ)이 없어진다.

 

 

[ 위의 EBNF를 구문도표로 나타낸 것 ] 

 

 

BNF → EBNF 변환 예시 

 

BNF와 EBNF로 구문도표를 그릴 때 

 - BNF와 EBNF의 구문표현이 다를 수 있기에

   각각을 구문도표로 나타내면 다른 형태로 그려질 수 있다. 

 

 

예를 들어, 교재 141쪽의 그림 4-5는

identifier에 대한 EBNF 표현(141쪽)을 구문 도표로 표현한 것입니다.

 

identifier에 대한 BNF 표현(140쪽)을 구문 도표로 표현한다면

그림 4-5와는 다르게 그려질 것입니다.

 

 

 

BNF의 구문도표 표현 

https://en.wikipedia.org/wiki/Syntax_diagram

 

반응형