Pegjs: ํŽ˜๊ทธ ํŒŒ์„œ์—์„œ ๋ฌธ๋ฒ• ๋ณต๊ตฌ

์— ๋งŒ๋“  2019๋…„ 07์›” 05์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: pegjs/pegjs

์˜๋ฌธ

peg์˜ ์ถœ๋ ฅ์„ ๋‹ค์‹œ ์ž…๋ ฅ ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์„ค๋ช…

์ตœ๊ทผ์— PEG๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์†๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. PEG ํŒŒ์„œ๊ฐ€ ์žˆ์ง€๋งŒ ์†Œ์Šค ๋ฌธ๋ฒ•์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. PEG ํŒŒ์„œ ์ฝ”๋“œ์—์„œ๋งŒ ๋ฌธ๋ฒ•์„ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฒˆ์‹ ๋‹จ๊ณ„

  1. ํŽ˜๊ทธ ํŒŒ์„œ ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด
  2. ์†Œ์Šค ๋ฌธ๋ฒ• ๋ณต๊ตฌ

์†Œํ”„ํŠธ์›จ์–ด

  • PEG.js: 0.10.0
  • Node.js: 12.6.0

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๊ณผ์ •์€ ์†์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ทœ์น™์€ peg$parse ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“ 
} else {
    peg$currPos = s#;
    s# = peg$FAILED;
}

์ˆœ์„œ๋Œ€๋กœ ํ•ญ๋ชฉ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  while (s# !== peg$FAILED) ๋Š” ๋ฐ˜๋ณต์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  if (s# === peg$FAILED) ๋Š” ์„ ํƒ์˜ ๋Œ€์ฒด ๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค.

>๋ชจ๋“  ๋Œ“๊ธ€

์ด ๊ณผ์ •์€ ์†์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ทœ์น™์€ peg$parse ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“ 
} else {
    peg$currPos = s#;
    s# = peg$FAILED;
}

์ˆœ์„œ๋Œ€๋กœ ํ•ญ๋ชฉ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  while (s# !== peg$FAILED) ๋Š” ๋ฐ˜๋ณต์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  if (s# === peg$FAILED) ๋Š” ์„ ํƒ์˜ ๋Œ€์ฒด ๋ถ„๊ธฐ์ž…๋‹ˆ๋‹ค.
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰