BNF
๊ตฌ๋ฌธ ํ์์ ์ ์ํ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ธ ํ๊ธฐ
<์ ์๋ ๋์> ::= ์ ์
<> ๋น๋จ๋ง (nonterminal)
: BNF ๊ท์จ๋ก ๋ค์ ์ ์๋ ๋์์ ์๋ฏธํ๋ค.
๋จ๋ง (terminal)
: ํค๋ณด๋์์ ์
๋ ฅํ ์ ์๋ ๊ธฐํธ
EBNF
BNF๋ฅผ ํ์ฅํด์ ๋ณด๋ค ์ฝ๊ธฐ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ํํ
- ๋ฉํ๊ธฐํธ
{}
: 0๋ฒ ์ด์ ๋ฐ๋ณต {s}+[]
: 0๋ฒ ๋๋ 1๋ฒ ์ ํ()
: ๋ฒ์์ค ํ1
BNF
<์์> ::= <์์> + <์์> | <์์> - <์์> | <์์> * <์์> | <์์> / <์์>
EBNF
<์์> ::= <์์> ( + | - | * | / ) <์์>
- ::= ๊ฐ์๊ฑฐ(๋ฉํ๊ธฐํธ)๋ฅผ Terminal๋ก ์ธ๋ : ‘’๋ก ๊ฐ์ผ๋ค
<BNF-rule> ::=<left-part> '::=' <right-part>
<right-part> ::=<right-part-element> {'|' <right-part-element> }
๊ตฌ๋ฌธ ๋ํ
- ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋๊ฒ produce
- ์ผ์ชฝ์ผ๋ก ๊ฐ๋๊ฒ reduce
๋ชจํธ์ฑ
<exp> ::= <exp>-<exp> | <exp>\*<exp>
์ผ ๋, 3 - 2 * 5 ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ์ฑ ํธ๋ฆฌ๋ฅผ ๋๊ฐ ๋ง๋ค ์ ์์
- ํด๊ฒฐ๋ฐฉ๋ฒ : ์์ ํญํฌ (์ ๋น๋จ๋ง ๊ธฐํธ <term> ๊ณผ ์ ๊ท์น์ ์ถ๊ฐํด์ ๋ฌธ๋ฒ์ ์ฐ์ ์์๋ฅผ ์ ํจ)
๊ฒฐํฉ์ฑ
<exp> ::= <exp>-<exp> | <term>
์ผ ๋, 7 - 3 - 2 ์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ์ฑ ํธ๋ฆฌ๋ฅผ ๋๊ฐ ๋ง๋ค ์ ์์
→ (7 - 3) - 2 / 7 - (3 - 2)
- ํด๊ฒฐ๋ฐฉ๋ฒ : BNF ๋ฌธ๋ฒ์ ์ข์ํ ๊ท์น์ผ๋ก ๋ฐ๊ฟ
์ข๊ฒฐํฉ :<exp> ::= <exp>-<term>
๊ธฐ์กด ๋ฌธ๋ฒ
๊ฐ์ ๋ ๋ฌธ๋ฒ
ํ์ผ์ฑ ํฅ์
์
const <ident> = <number>{;<ident> = <number>};
ํ
const {<ident> = <number>;}