EBNF
EBNF의 등장 이유는 BNF를 이용해서 표현하는데 어려움이 있기 때문이다
예를들어 식별자의 길이를 지정해 준 경우 아래와 같이 엄청난 가지 수의 생성 규칙이 생성 될 수 있기 때문이다
<식별자> ::= <영문자> | <영문자><영문자> | <영문자><숫자>
| <영문자><영문자><영문자>|<영문자><영문자><숫자>
| <영문자><숫자><영문자> | <영문자><숫자><숫자> | ...
| <영문자><숫자><숫자><숫자><숫자><숫자><숫자><숫자>
- <영문자> ::= a | b | c | ··· | z
- <숫자> ::= 0 | 1 | 2 | ··· | 9
이와 같이 BNF는 반복되는 부분을 표시하는데 어려움을 가지기 때문에, 반복되는 부분을 쉽게 표시하면서 BNF (Backus-Naur Form)로 표시하는 방법이 EBNF이다.
EBNF 표기법
반복되는 부분을 BNF 표기법보다 읽기 쉽고 간결하게 표현
BNF 표기법의 세 가지 메타 기호에 반복을 나타내는 { }와 [ ]를 추가하여 사용
- {a}는a가0번이상반복될수있다는것을의미
- 정규표현
a*
와 같은 의미로 생각
- 정규표현
- 또한선택적인부분을표시할때는[]로표현
- [x]는 x가 나타나지 않거나 한 번 나타날 수 있음을 의미
- [x]는 {x} 과 같은 의미
- 메타 기호를 terminal 기호로 사용하는 경우에는 그 기호를 작은 따옴표(’ 와 ‘)로 묶어 표현한다
{ }, [ ], |, < >), ::=
와 같이 EBNF에서 사용되어지는 메타기호를 터미널 기호로 사용하 는 경우 발생하는 혼돈을 피하기 위해서 사용
예제 1. EBNF로 표현하기
첫 번째 기호가 영문 소문자로 시작하고, 두 번째 기호부터는 영문 소문자나 숫자이며, 최대 8자인 식별자를 EBNF 표기법으로 표현해보자
풀이
예제 2. EBNF로 표현하기
if 문장에서 else 부분이 선택적으로 나타날 수 있다면 다음과 같이 표현
➔ <if_st> ::= if <condition> then <statement> [else <statement>]
예제 3. 메타 기호를 터미널 기호로 사용하기
메타 기호 ::=과 |를 터미널 기호로 사용한다
- BNF_rule> ::= <left_part>‘::=’<right_part>
- <right_part> ::= <right_part_element>
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글
오토마타 (0) | 2023.05.23 |
---|---|
프로그래밍 언어론 - 데이터 타입 (0) | 2023.05.23 |
구문 도표 (0) | 2023.05.22 |
정규 문법의 연산 순서 (1) | 2023.05.22 |
프로그래밍 언어론 - 선언 블록 영역 (0) | 2023.05.18 |