Parsing
๊ทผ 2๋ฌ๊ฐ ๋ฏธ๋์ ธ ๊ณผ์ ๋ฅผ ํ๋ฉด๊ฑฐ ๊ฐ์ฅ ์ค๋์๊ฐ ๊ณ ๋ฏผํ๋๊ฑด ํ์ฑ๋ถ์ด๋ค(์ฌ์ค ์์ง๋ ์๋ฒฝํ์ง ์๋ค). ํด๋น ํฌ์คํธ์์ ํ์ฑ์ ์ฒ๋ฆฌํ๋ฉด์ ์ด๋ ํ (์๋ํ๊ณ ์ถ์)๊ฐ๋ ์ ์ฌ์ฉํ๋์ง, ์ดํ์ ์ด๋ค๊ฐ๋ ์ ํตํด ์ด๋ฅผ ๊ฐ๋ํ ์ ์๋์ง ์ ์ด๋ณด๊ณ ์ํ๋ค.
1. ๊ธฐ๋ณธ ๋์๋ฐฉ์
๋ฌธ์์ด์ ํ์ธํ๋ ๋ฐฉ์์ ํฌํฌ์ธํฐ ๋ฐฉ์๊ณผ ํ๋๊ทธ๋ฐฉ์์ ์ฌ์ฉ. idx๋ ์์์ , slide๋ ์คํ์ ์ด๋ค.
- ์์์ ์์ ์คํ์ ์ ์ฆ๊ฐ์์ผ ๊ฐ๋ฉด์ ๋ฌธ์ ํ๋์ฉ ํ์ธํ๋ค.
- action_decider์์ ๋ฌธ์์ ๋ฐ๋ฅธ ๋์๋ฐฉ์๋ค(action_set)์ ๋ฐํํ๋ค.
- ํน์ ํ ๋์์ ์๊ตฌํ๋ ๊ธ์(
'
,"
,|
,>
โฆ) : ์ด์ ๊น์ง์ ์ ๋ ฅ์ ๋ฒํผ๋ก ์ฎ๊น or ์๋ฆฌ์คํธ or flg์ฌ๋ถ ํ์ธ ๋ฐ ์ธํ โฆ - ์ผ๋ฐ ๋ฌธ์,
'
๋ด๋ถ์ ์์ด์ ์๋ฏธ๊ฐ ์์ด์ง ๋ฌธ์ : ++slide(J)
- ํน์ ํ ๋์์ ์๊ตฌํ๋ ๊ธ์(
- ๋ฐ๋ณต๋ฌธ์ ํตํด ๋์๋ฐฉ์๋ค(action_set)์ ์ฐจ๋ ๋๋ก ์ํํ๋ค.
- CJIJE :
C : [idx, idx + slide)๋ฒ์ ๋ฌธ์์ด์ ๋ฒํผ๋ก ์ฎ๊น
->J : ++slide
->I : idx์์น slide๋ก ์ด๋
->J : ++slide
->E : idx ~ idx + slide ํ๊ฒฝ๋ณ์ ๋์ value ์ฐพ์์ ๋ฒํผ๋ก ์ฎ๊น
- CJIJE :
while (์ข
๋ฃ ํ๋๊ทธ) {
char *action_set = action_decider(*line)
// ์ ๋ฌ๋ฐ์ action_set์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํ๋์ฉ ์ํ
while (*action_set != '\0')
{
if (*action_set = 'C')
[idx, idx + slide)๋ฒ์ ๋ฌธ์์ด์ buffer์ cat.;
else if (*action_set = 'E')
[idx, idx + slide)๊ฐ key์ธ ํ๊ฒฝ๋ณ์ value๋ฅผ buffer์ cat.;
else if (*action_set = 'J')
++slide;
else if (*action_set = 'I')
idx += slide; slide = 0;
else if (*action_set = 'A')
buffer์ ์๋ ๋ด์ฉ์ ๋ฆฌ์คํธ ๋ด์ฉ์ ์ถ๊ฐ, buffer ์ฌํ ๋น;
...
++action_set;
}
}
์ด์ธ์๋ ๋ช๊ฐ์ ๋์๋ค์ด ์์ง๋ง ๋์์ ์์๋ณด๋๋ด ํ์๊ฐ ์์ผ๋ฏ๋ก ์๋ต.
- ์ฅ์ : ์กฐ๊ฑด์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋ณ๊ฒฝ์ ๋ฐํ๋๋ action_set๋ง ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค. ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , action_decider ๊ฒฐ๊ณผ๊ฐ ์ด๋ ํ ๋์๋ค์ ํ ์ง ์ง๊ด์ ์ด๋ค.
- ๋จ์ : action_set์ ํ ๋นํ ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ ํ์.
2. ๋์ ๊ฒฐ์ (action_decider)
ํด๋น ๋ถ๋ถ์์๋ action_decider์ ์ ์ ๋ณ์ flgs๋ฅผ ์ฌ์ฉํ์ฌ, ํ๋๊ทธ๋ค์ ON/OFF ํ๋ค.
์ด๋ flg์ ์ข
๋ฅ๋ '
, "
, $
, ๋ฆฌ๋ค์ด๋ ์
์ด ์๊ณ , ๊ฐ ํ๋๊ทธ๋ flgs์ bitํํ(0b0001
, 0b0010
โฆ)๋ก ๋นํธ ์ฐ์ฐ๋์ด ์ ์ฅ๋๋ค.
์ด๋ฌํ ํํ๋ฅผ ์ทจํ ์ด์ ๋
'
,"
๋ด๋ถ์ ์๋ ๊ธ์๋ค์ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์ด์ ์ ๋ค์ด์จ ์ด์ ์ ์ด๋ฌํ ๋ฌธ์๋ค์ด ๋ค์ด์๋์ง ์ ์ฅํ ํ์๊ฐ ์๋ค."
๋ด๋ถ์์๋$
๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ๋ฆฌ๋ค์ด๋ ์ ํ ํ์ผ ์ด๋ฆ๋'
,"
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ฑ ํ๋๊ทธ๊ฐ ์ค์ฒฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ตฌํํ ๋์ ์์(์ผ๋ถ)
- ex:
'
flg ON ์ํ์์space
,$
๋ฑ- -> ์ผ๋ฐ๋ฌธ์๋ก ์ทจ๊ธํ์ฌ
J
(++slide)๋์ ๋ฐํ
- -> ์ผ๋ฐ๋ฌธ์๋ก ์ทจ๊ธํ์ฌ
- ex:
"
flg ON ์ํ์์$
์ ๋ ฅ- ->
$
flg ON - ->
CJI
([idx ~ idx + slide)
๋ฌธ์์ด์ buffer์ ์ด์ด๋ถ์,++slide
,idx
์ด๋)๋์๋ค์ ๋ฐํ
- ->