๐Ÿ‘Š CS/ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ก 

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ก ] 4. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ตฌ๋ฌธ๊ณผ ๊ตฌํ˜„ ๊ธฐ๋ฒ•

ํ•œ๊ทœ์ง„ 2022. 6. 7. 23:04

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>;}