BNF ํํ๋ฒ
BNF(Backus-Naur Form)๋ Algol์ ๊ตฌ๋ฌธ์ ์ ์ํ๊ธฐ ์ํด ๋ฐฐ์ปค์ค(Backus)์ ๋์ฐ์ด(Naur)๊ฐ ์ฌ์ฉํ ํํ๋ฒ์ด๋ค.
BNF ๊ธฐํธ
๋ฉํ ๊ธฐํธ
BNF๋ ์ธ ๊ฐ์ง ๋ฉํ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฉํ ๊ธฐํธ | ์๋ฏธ |
::= | ์ ์ |
| | ํ์ผ(OR) |
<> | ๋น๋จ๋ง ๊ธฐํธ |
- BNF์์ ๊ท์น์ ๋ฉํ ๊ธฐํธ ::=๋ฅผ ์ด์ฉํ์ฌ ํํํ๋ค.
- ::=๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ ์ํ๋ค.
- ::=์ ์ผ์ชฝ์๋ ํ๋์ ๋น๋จ๋ง ๊ธฐํธ๊ฐ, ์ค๋ฅธ์ชฝ์๋ ๊ธฐํธ๋ค์ ํ์ฉํ์ฌ ์ ์ํ๋ ๋ด์ฉ์ด ๋์์ผ ํ๋ค.
๋จ๋ง/๋น๋จ๋ง ๊ธฐํธ
๊ธฐํธ | ์๋ฏธ | ์ |
๋จ๋ง ๊ธฐํธ | ๋ฉํ ๊ธฐํธ <>๋ก ๋ฌถ์ธ ๊ธฐํธ | <identifier>, <letter>, <digit>, ... |
๋น๋จ๋ง ๊ธฐํธ | ๋น๋จ๋ง ๊ธฐํธ ๋ฐ ๋ฉํ ๊ธฐํธ๊ฐ ์๋ ๊ธฐํธ | A, B, a, b, 0, 1, if, then, +, -, ... |
BNF์ ์
<if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ>
if๋ฌธ์ ์ ์๋ฅผ BNF๋ก ํํํ ๊ท์น์ ์์ด๋ค. ์ด ๊ท์น์ ๋น๋จ๋ง ๊ธฐํธ <if๋ฌธ>์ ๋จ๋ง ๊ธฐํธ if, then ๊ทธ๋ฆฌ๊ณ ๋น๋จ๋ง ๊ธฐํธ <๋ ผ๋ฆฌ์>๊ณผ <๋ฌธ์ฅ>์ ์ด์ฉํ์ฌ ์ ์ํ๊ณ ์๋ค.
<if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> else <๋ฌธ์ฅ> | if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ>
๋ฉํ ๊ธฐํธ |์ ๋ ์ค ํ๋๋ฅผ ํ์ผํ๋ค๋ ์๋ฏธ์ด๋ค.
BNF๋ก ์๋ณ์๋ฅผ ์ ์ํด ๋ณด์. ์๋ณ์๋ ๋ฌธ์์ ์ซ์๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ฒซ ๊ธ์๋ ๋ฌธ์์ฌ์ผ ํ๋ค. ๋ฌธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ๊ณผ ์๋ฌธ์ ์ํ๋ฒณ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ซ์๋ 0๋ถํฐ 9๊น์ง ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์ ํ๋ฉด, BNF ํํ์ ๋ค์๊ณผ ๊ฐ๋ค.
<identifier> ::= <letter> | <identifier><letter> | <identifier><digit>
<letter> ::= A | B | C | ... | X | Y | Z | a | b | ... | z |
<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
BNF์ ํ์ฅ - EBNF ํํ๋ฒ
EBNF(Extended BNF)๋ BNF์ ๋ฉํ ๊ธฐํธ๋ฅผ ์ถ๊ฐํ์ฌ ๊ท์น์ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๋๋ก ํ์ฅ๋ BNF์ด๋ค. 4๊ฐ์ง ๋ฉํ ๊ธฐํธ๊ฐ ์ถ๊ฐ๋์๋ค.
๊ตฌ๋ถ |
๋ฉํ ๊ธฐํธ | ์๋ฏธ |
BNF |
::= | ์ ์ |
BNF |
| | ํ์ผ(OR) |
BNF |
<> | ๋น๋จ๋ง ๊ธฐํธ |
EBNF | [ ] |
์๋ต ๊ฐ๋ฅ |
EBNF | { } | 0๋ฒ ์ด์ ๋ฐ๋ณต |
EBNF | ( ) |
ํ์ ๋ ๋ฒ์์ ํ์ผ |์ ํจ๊ป ์ฐ์ |
EBNF | ' ' | ๋ฉํ ๊ธฐํธ ์์ฒด๋ฅผ ๋จ๋ง ๊ธฐํธ๋ก ์ฌ์ฉ |
๋ฉํ ๊ธฐํธ [ ]์ ์
์๋ฏธ : ์๋ต ๊ฐ๋ฅ
์์์ ๋ณด์๋ <if๋ฌธ> ์ ์ ๊ท์น์ BNF ํํ์ EBNF๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
BNF
<if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> else <๋ฌธ์ฅ> | if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ>
EBNF
<if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> [ else <๋ฌธ์ฅ> ]
๋ฉํ ๊ธฐํธ { }์ ์
์๋ฏธ : 0๋ฒ ์ด์ ๋ฐ๋ณต
๋ถํธ ์๋ ์ ์(unsigned integer)๋ฅผ BNF์ EBNF๋ก ๊ฐ๊ฐ ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
BNF
<unsigned integer> ::= <digit> | <unsigned integer><digit>
EBNF
<unsigned integer> ::= <digit> { <digit> }
์ BNF ํํ์ ๋ฐ๋ณต์ ๋ํ๋ด๊ธฐ ์ํด |์ ์ฌ๊ท์ ์ธ ํํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ค.
EBNF ํํ์์ ๋น๋จ๋ง ๊ธฐํธ <unsigned integer>๋ ๋ฉํ ๊ธฐํธ { }๋ก ๋ฌถ์ธ '<digit>'์ 0๋ฒ ์ฌ์ฉํ์ฌ ๊ทธ๋ฅ ํ ์๋ฆฌ ์์ธ <digit>์ด ๋ ์๋ ์๊ณ ํ ๋ฒ ์ฌ์ฉํ์ฌ ๋ ์๋ฆฌ ์์ธ <digit><digit>์ด ๋ ์๋ ์์ผ๋ฉฐ ๊ทธ ์ด์์ด ๋ ์๋ ์๋ค.
<unsigned integer> = <digit>
<unsigned integer> = <digit><digit>
<unsigned integer> = <digit><digit><digit>
<unsigned integer> = <digit><digit><digit><digit><digit><digit>, ...
๋ฉํ ๊ธฐํธ ( )์ ์
์๋ฏธ : ๋ฒ์ ์ค ํ์ผ
์ฌ์น ์ฐ์ฐ ์์์ BNF์ EBNF๋ก ๊ฐ๊ฐ ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
BNF
<์์> ::= <์์> + <์์> | <์์> - <์์> | <์์> * <์์> | <์์> / <์์>
EBNF
<์์> ::= <์์> ( + | - | * | / ) <์์>
EBNF ํํ์์ ( )๋ก ๋ฌถ์ ๋ฒ์, ์ฆ +, -, *, / ์ค ํ ๊ฐ์ง ์ฐ์ฐ์๋ง ํ์ผํ์ฌ ์ฌ์ฉํ๋ ๊ท์น์ด๋ค.
๋ฉํ ๊ธฐํธ ' '์ ์
์๋ฏธ : ๋ฉํ ๊ธฐํธ ์์ฒด๋ฅผ ๋จ๋ง ๊ธฐํธ๋ก ์ฌ์ฉ
BNF ๊ท์น์ ::=๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ตฌ์ฑ๋จ์ EBNF๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
<BNF ๊ท์น> ::= <์ผ์ชฝ ๋ถ๋ถ> '::=' <์ค๋ฅธ์ชฝ ๋ถ๋ถ>
๋ฉํ ๊ธฐํธ ::=๋ฅผ ' '๋ก ๋ฌถ์์ผ๋ก์จ ํ๋์ ๋จ๋ง ๊ธฐํธ๋ก ์ฌ์ฉํ๋ค. ๋ง์ผ ๋ฉํ ๊ธฐํธ ' '๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ท์น์ ์ ์๋ฅผ ์๋ฏธํ๋ ๋ฉํ ๊ธฐํธ๊ฐ ๋์ด ์๋ชป๋ ํํ์ด ๋๋ค.
๊ตฌ๋ฌธ ๋ํ(Syntax Diagram)
๊ตฌ๋ฌธ ๋ํ๋ ์์๋์ ์ ์ฌํ๊ฒ ๊ทธ๋ฆผ(๋ํ)์ผ๋ก ๊ตฌ๋ฌธ์ ํํํ๋ ๊ฒ์ด๋ค. ์ด๊ธฐ Pascal์ ์ฌ์ฉ์ ์ค๋ช ์์ ์ฌ์ฉ๋์๋ค.
๊ตฌ๋ฌธ ๋ํ์ ๊ธฐ๋ณธ ๋จ์
๋ํ | ์๋ฏธ |
โก (์ฌ๊ฐํ) |
๋น๋จ๋ง ๊ธฐํธ |
โ (์) | ๋จ๋ง ๊ธฐํธ |
→ (ํ์ดํ) | ๊ธฐํธ ์ฐ๊ฒฐ |
์๋ ๊ทธ๋ฆผ์์ if์ then์ ๋จ๋ง ๊ธฐํธ, ๋ ผ๋ฆฌ์๊ณผ ๋ฌธ์ฅ์ ๋น๋จ๋ง ๊ธฐํธ์ด๋ค. ๊ท์น์ ํ์ดํ๋ฅผ ๋ฐ๋ผ ์์๋๋ก ๋์ด๋๋ ๊ฒ์ผ๋ก ์ ์๋๋ค. ํ์ดํ๋ ๋๋์ด์ง๊ฑฐ๋ ํฉ์ณ์ง๊ธฐ๋ ํ๊ณ ๋๋์๊ฐ๊ธฐ๋ ํ๋๋ฐ ์ด๋ฅผ ํตํด ํ์ผ, ๋ฐ๋ณต์ ํํํ ์ ์๋ค. ์ค์ ๊ตฌ๋ฌธ์ด ์ ์ฉ๋ ๋ ํ์ชฝ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ๋ผ๊ฐ ์ ์๋ค.
- BNF : <if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> | if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> else <๋ฌธ์ฅ>
- EBNF : <if๋ฌธ> ::= if <๋ ผ๋ฆฌ์> then <๋ฌธ์ฅ> [ else <๋ฌธ์ฅ> ]
๊ตฌ๋ฌธ ๋ํ์ ์
- BNF : <์์> ::= <์์> + <์์> | <์์> - <์์> | <์์> * <์์> | <์์> / <์์>
- EBNF : <์์> ::= <์์> ( + | - | * | / ) <์์>
BNF : <unsigned integer> ::= <digit> | <unsigned integer><digit>
EBNF : <unsigned integer> ::= <digit> { <digit> }
ํํ ๋ฐฉ๋ฒ์ ์ํธ ๋ณํ
BNF, EBNF, ๊ตฌ๋ฌธ ๋ํ ํํ์ ์ํธ ๋ณํ์ด ๊ฐ๋ฅํ๋ค.
BNF | EBNF | ๊ตฌ๋ฌธ ๋ํ |
| | [ ] | ํ์ดํ๋ฅผ ๋๋ |
( )์ ๋ฐ๊นฅ ๋ถ๋ถ์ ๋ฐ๋ณตํ์ฌ ํํ | ( ) | ํ์ดํ๋ฅผ ๋๋ |
{ }๋ก ๋ฌถ์ธ ๋ถ๋ถ์ด 0๋ฒ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์ ํ ๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๋ก ๋๋์ด ์ฌ๊ท์ ์ผ๋ก ํํ | { } | ํ์ดํ๋ฅผ ๋๋์๊ฐ๊ฒ ํจ |
์๋ณ์(identifier)์ ์ ์๋ฅผ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํํํด ๋ณด์. ๋ฌธ์(letter)์ ์ซ์(digit)๋ก ๊ตฌ์ฑ๋๋ฉฐ ์ฒซ ๊ธ์๋ ๋ฌธ์๋ผ๊ณ ๊ฐ์ ํ๋ค. ํธ์์ ๋ฌธ์์ ์ซ์์ ๋ํ ์ ์๋ ์๋ตํ๋ค.
- BNF
<identifier> ::= <letter> | <identifier><letter> | <identifier><digit>
- EBNF
<identifier> ::= <letter> { <letter> | <digit> }
- ๊ตฌ๋ฌธ ๋ํ
ํฌ์คํ ๋ง์นจ.
'Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ด์ฅ์น - ์ ์ด์ฅ์น์ ๊ตฌ์ฑ๊ณผ ๋ช ๋ น์ด ์ํ ๊ณผ์ (0) | 2019.11.09 |
---|---|
์ฒ๋ฆฌ์ฅ์น - ์ ์ด๋จ์ด์ ์ดํด์ ๋ง์ดํฌ๋ก ์ฐ์ฐ์ ์ ์ด๋จ์ด ๋ณํ (0) | 2019.11.09 |
์ปดํจํฐ ๋ช ๋ น์ด - ์ฃผ์ ์ง์ ๋ฐฉ์์ ์ข ๋ฅ์ ์ดํด (0) | 2019.11.08 |
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์๊ตฌ์ฌํญ๊ณผ ์ค๊ณ ์์น (0) | 2019.10.16 |
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๊ฐ ๊ธฐ์ค (0) | 2019.10.16 |
๋๊ธ