[Compiler] 5-1. Bottom-up Parser(โ… )

2JE0ยท2022๋…„ 10์›” 15์ผ
1

Compiler

๋ชฉ๋ก ๋ณด๊ธฐ
3/4
post-thumbnail

๐ŸŽ†Bottom-up parsing

Bottom-up parsing and reverse rightmost derivation

S์—์„œ rightmost Derivation ์ˆ˜ํ–‰ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์€ ์‹์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. A->ฮฒ ์ฒ˜๋Ÿผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ production์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ฐ˜๋Œ€๋กœ ๋Œ์•„๊ฐˆ ๋•Œ์—๋Š” handle ฮฒ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. leaves์—์„œ root๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์ž‘์—…ํ•˜๊ณ  ๊ทธ ๊ณผ์ •์„ reduction์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค

Formally,

right sentential form ฮณ์˜ handle์ด < A->ฮฒ, k> (k๋Š” ์œ„์น˜, A->ฮฒ๋Š” production rule) ๋ผ๋ฉด k์œ„์น˜์— ์žˆ๋Š” ฮฒ๋ฅผ A๋กœ ๋ฐ”๊พผ๋‹ค.

Handle pruning

handle์„ ์ฐพ๊ณ , reducing ํ•˜๋Š” ๊ณผ์ •


Example



๐ŸŽ†Shift-reduce Parsing

LR(0) Example


Input: x + ( y + z )

  1. stack์— invalid๋ฅผ ๋„ฃ๋Š”๋‹ค.
  2. ์‹œ์ž‘ state์ธ s0๋ฅผ ๋„ฃ๋Š”๋‹ค. (shifting)
  3. ๋นจ๊ฐ„์ƒ‰ ์›์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ˆ˜์‹์ค‘x๋ฅผ pushํ•œ๋‹ค.
    s0์—์„œ x์— ํ•ด๋‹นํ•˜๋Š” i๋ฅผ ๋”ฐ๋ผ์„œ ๊ฐ„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ state๋ฅผ push ํ•œ๋‹ค.
    (i๋ฅผ push ํ•˜๊ณ , s5๋ฅผ push ํ•จ)
  4. ์ด๋•Œ๋Š” ๋นจ๊ฐ„์ƒ‰ ์›์•ˆ์— ๋“ค์–ด๊ฐ”์œผ๋ฏ€๋กœ reduction ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.
    s5๋Š” T -> iโ€ข์ด๋‹ค. ํ™”์‚ดํ‘œ ์˜ค๋ฅธ์ชฝ์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜ 2๋ฐฐ๋ฅผ pop ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  T๋ฅผ push ํ•œ๋‹ค. T์•„๋ž˜์ชฝ์— s0๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ s0์—์„œ T๋ฅผ ๋”ฐ๋ผ๊ฐ„ s6๋„ push ํ•ด์ค€๋‹ค.
  5. ์ด๋•Œ๋„ ๋นจ๊ฐ„์ƒ‰ ์›์•ˆ์— ๋“ค์–ด๊ฐ”์œผ๋ฏ€๋กœ reduction ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค.
    s5๋Š” E -> Tโ€ข์ด๋‹ค. ํ™”์‚ดํ‘œ ์˜ค๋ฅธ์ชฝ์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜ 2๋ฐฐ๋ฅผ pop ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  E๋ฅผ push ํ•œ๋‹ค. T์•„๋ž˜์ชฝ์— s0๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ s0์—์„œ E๋ฅผ ๋”ฐ๋ผ๊ฐ„ s1๋„ push ํ•ด์ค€๋‹ค.
  6. ์ด์ œ๋Š” ๊ฒ€์ •์ƒ‰ ๋™๊ทธ๋ผ๋ฏธ ์•ˆ์œผ๋กœ ๋“ค์–ด์™”์œผ๋ฏ€๋กœ Input: x + ( y + z ) ์ค‘์— x ๋‹ค์Œ์ธ +๋ฅผ push ํ•ด์ฃผ๊ณ  s1์—์„œ +๋ฅผ ๋”ฐ๋ผ s3์œผ๋กœ๊ฐ„๋‹ค(push).
  7. ์ด์ œ๋Š” ๊ฒ€์ •์ƒ‰ ๋™๊ทธ๋ผ๋ฏธ ์•ˆ์œผ๋กœ ๋“ค์–ด์™”์œผ๋ฏ€๋กœ Input: x + ( y + z ) ์ค‘์— x ๋‹ค์Œ์ธ (๋ฅผ push ํ•ด์ฃผ๊ณ  s1์—์„œ (๋ฅผ ๋”ฐ๋ผ s7์œผ๋กœ๊ฐ„๋‹ค(push).

... ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด