티스토리 뷰
BNF를 확장시킨 것이 EBNF이다. Extended BNF 그래서 EBNF다. 일반적으로 3가지 확장 사항이 포함된다.
1. 선택: '[', ']'로 표현한다.
예시: <if_stmt> ::= if( <exp> ) <stmt> [ else <stmt> ]
위 예제를 보고 else 부분이 선택되지 않는 경우 if( <exp> ) <stmt> 란 것을 우린 알 수 있다.
2. 반복: '{', '}'으로 표시하고, 무한정 반복되거나 생략될 수 있음을 나타낸다. 선택이란 다른 점이 별로 없어보이지만, 선택은 반복이 아닌란 것을 명심하자.
예시: <ident_list> ::= <ident> { , <ident> }
위 예시를 지금은 이해가 되지 않을 수 있지만, 조금 있다 볼 예제를 보고 알 수 있다.
3. 다중 선택: '(', ')'로 표시하고 OR란 것을 알 수 있다. 소괄호로 표현하기 때문에 어휘항목인 터미널이랑 혼동될 수 있으니 조심해야한다.
예시: <term> ::= <term> ( * | / | % ) <facotr>
BNF를 EBNF으로 바꾸거나, EBNF를 BNF로 바꾸거나 한다. 먼저 BNF를 EBNF로 바꿔보자.
BNF
<expr> ::= <expr> + <term> | <expr> - <term> | <term>
<term> ::= <term> * <factor> | <term> / <factor> | <factor>
<factor> ::= <exp> ** <factor> | <exp>
<exp> ::= ( <expr> ) | <id>
EBNF
<expr> ::= <term>{ ( + | - ) <term> }
<term> ::= <factor> { ( * | / ) <facotr> }
<factor> ::= <exp> { ** <exp> }
<exp> ::= ( <expr> ) | <id>
이후 글에서 더 많은 예제를 살펴보자!
'코딩 관련' 카테고리의 다른 글
Oauth 2.0 카카오, 네이버, 구글 관련하여 생각 정리 (0) | 2021.07.24 |
---|---|
하노이의 탑 - 재귀함수에 대한 생각 2 (0) | 2021.06.21 |
프로그래밍언어론 - BNF 모호함을 나타내기 (0) | 2021.06.12 |
프로그래밍언어론 - BNF (0) | 2021.06.11 |
재귀함수에 대한 생각 (0) | 2021.06.09 |