Pegjs: ๊ธฐ๋Šฅ: pegjs ํŒŒ์ผ์˜ ๋Ÿฐํƒ€์ž„ ์š”๊ตฌ

์— ๋งŒ๋“  2019๋…„ 12์›” 03์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pegjs/pegjs

๋ฌธ์ œ ์œ ํ˜•

  • ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ: ์•„๋‹ˆ์š”
  • ๊ธฐ๋Šฅ ์š”์ฒญ: ์˜ˆ
  • ์งˆ๋ฌธ: ์•„๋‹ˆ์˜ค
  • ๋ฌธ์ œ๊ฐ€ ์•„๋‹˜: ์•„๋‹ˆ์˜ค

์ „์ œ ์กฐ๊ฑด

  • ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?: ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ
  • ์ €์žฅ์†Œ ๋ฌธ์ œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์…จ์Šต๋‹ˆ๊นŒ?: ์˜ˆ
  • ํฌ๋Ÿผ์„ ํ™•์ธํ•˜์…จ์Šต๋‹ˆ๊นŒ?: ํฌ๋Ÿผ ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์›น ๊ฒ€์ƒ‰(google, yahoo ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜์…จ์Šต๋‹ˆ๊นŒ?: ์˜ˆ

์„ค๋ช…

๋Ÿฐํƒ€์ž„์— Node์—์„œ ์ง์ ‘ PEGJS ํŒŒ์ผ์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ๋ฌธ์ œ์˜ ์ฃผ์š” ๋ชฉ์ ์€ ์ฝ”๋“œ ์ ์šฉ(์˜ˆ: Mocha ํ…Œ์ŠคํŠธ์šฉ)์ž…๋‹ˆ๋‹ค.

์ด ํ›„์ž์˜ ์ฝ”๋“œ ์ ์šฉ ์‚ฌ๋ก€๋Š” ๋จผ์ € #93(์†Œ์Šค ๋งต ์ œ๊ณต)์„ ๋จผ์ € ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋ฉด ํ…Œ์ŠคํŠธ + ํŽ˜๊ทธ ์ฝ”๋“œ์˜ ๋ณ„๋„ ๊ณ„์ธก ์‚ฌ๋ณธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Node์˜ require.extensions ๊ฐ€ ts-node ์— ๋Œ€ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ https://stackoverflow.com/ ์— ๋Œ€ํ•œ ํ† ๋ก ์— ๋”ฐ๋ผ require.extensions ๋Š” Node ์—์„œ ๊ธฐ์ˆ ์ ์œผ๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Questions/28884377/better-way-to-require-extensions-with-node-js (ํŠนํžˆ ์ด ๋‹ต๋ณ€ ์˜ ๋งฅ๋ฝ์—์„œ ), ์—ฌ๊ธฐ์—์„œ ์œ ์ผํ•œ ์‹ค์šฉ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์˜๊ฒฌ์— ๋”ฐ๋ฅด๋ฉด ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Node๊ฐ€ Babel์„ ๊นจ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

@brettz9 - "๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋ ค๋˜ ์ฐธ์ด์—ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ ๋‹น์‹ ์ด๋ผ๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๋น„์Šทํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์ด ํ† ๋ก ์„ ์ค‘๋‹จํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด

๋‚˜๋Š” ํ˜„์žฌ ๊ฑฐ๊ธฐ์—์„œ ๊ธด ๊ฒƒ์„ ์“ฐ๊ณ  ์žˆ๋‹ค

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

๋‚˜๋Š” ์ด๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@ExE-Boss : ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ์šฉ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋˜ํ•œ ์ด๊ฒƒ์ด pegjs ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ผ๊ณ  ์–ธ๊ธ‰ํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์ด๊ฒƒ์ด PEG.js ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ œ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋Œ€ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ข‹์Šต๋‹ˆ๋‹ค.

2017๋…„ es6 ๋ชจ๋“ˆ๊ณผ ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” 2์ค„์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋” ์ด์ƒ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์‹ค์ œ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด ํ…Œ์ŠคํŠธ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ปค๋ฒ„๋ฆฌ์ง€ ํ›„ํฌ๋ฅผ ๋‘์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ํŒŒ์ผ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

์ ์šฉ ๋ฒ”์œ„๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ jest ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ž๋™์œผ๋กœ ํฌํ•จ๋˜๋ฉฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๋Š” ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ ์™ธ๋ถ€์—์„œ ์ถ”๊ฐ€๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๋Š” ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ‘์ž๊ธฐ node.js ํŒจํ‚ค์ง€ ์ƒํƒœ๊ณ„์— ์—ฐ๊ฒฐ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์ปค๋ฒ„๋ฆฌ์ง€๋Š” ํŒŒ์„œ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์š•๋ง์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ๊ณ ๋ คํ•˜์„ธ์š”:

Food
    / "Peanuts"
    / "Shellfish"
    / "Rice"

์ด์ œ ์Œ€์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. peg ์€ ๋จผ์ € Peanuts ๋ฅผ ์‹œ๋„ํ•œ ๋‹ค์Œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ peg ๋Š” Shellfish ๋ฅผ ์‹œ๋„ํ•œ ๋‹ค์Œ peg ๋Š” Rice ๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

Rice ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋งŒ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์„ธ ๊ฐ€์ง€ ๋ชจ๋‘์— ๋Œ€ํ•œ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์ž˜๋ชป ํ‘œ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

packrat ํŒŒ์„œ(์†”์งํžˆ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์„œ์˜ ๋ฐฉ์‹)๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์€ ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ๊ฐ€์งœ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค

์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ๋งˆ์„ธ์š”

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ปค๋ฒ„๋ฆฌ์ง€ ํ›„ํฌ๋ฅผ ๋„ฃ๋Š” ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์„œ๊ฐ€ ๊ด€๋ จ์„ฑ์ด ์žˆ๋Š” ์ผ๋ถ€ ๋ถ„๊ธฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ„๊ธฐ๋กœ ์ž๋™ ์ƒ์„ฑ๋˜๋ฉด ์ž๋™ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์ด๊ฒƒ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ํŒŒ์„œ ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” pegjs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์ž์ฒด ์ ์šฉ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์Œ)์˜ ์ ์šฉ ๋ฒ”์œ„์™€ ๊ด€๋ จ์ด ์—†์ง€๋งŒ ์ƒ์„ฑ๋œ ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ์˜ ๋ฌธ๋ฒ• ์‚ฌ์šฉ ์ ์šฉ ๋ฒ”์œ„์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜ˆ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์„œ๋Š” "๋•…์ฝฉ", "์กฐ๊ฐœ๋ฅ˜" ๋ฐ "์Œ€"์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ํ–‰์ด ์žˆ์œผ๋ฉฐ, ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๋ณด๊ณ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ruleA = ruleB / ruleC ์™€ ๊ฐ™์€ ๊ทœ์น™์ด "ruleA"์— "ruleB"์™€ "ruleC"๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š”์ง€ ๋˜๋Š” "ruleA", "ruleB" , ๋ฐ "ruleC"๋Š” ๋ชจ๋‘ ์–ด๋–ป๊ฒŒ๋“  ์ ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ruleD = ruleB / ruleF ruleB ์˜ ์ ์šฉ ๋ฒ”์œ„๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ ํ•ด๋‹น ์ ์šฉ ๋ฒ”์œ„๊ฐ€ ๋‚ด์—์„œ ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•  ํ•„์š”๋ฅผ ํ”ผํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "ruleA", ํŠนํžˆ ๋Œ€์•ˆ๊ณผ ์กฐํ•ฉ์ด ๋งŽ์€ ๊ฒฝ์šฐ).

์ด ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ์ž…๊ตฌ ํŒŒ์ผ๊ณผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ์ž…๊ตฌ ํŒŒ์ผ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@brettz9 - "๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋ ค๋˜ ์ฐธ์ด์—ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ ๋‹น์‹ ์ด๋ผ๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ๋น„์Šทํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์ด ํ† ๋ก ์„ ์ค‘๋‹จํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด

๋‚˜๋Š” ํ˜„์žฌ ๊ฑฐ๊ธฐ์—์„œ ๊ธด ๊ฒƒ์„ ์“ฐ๊ณ  ์žˆ๋‹ค

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰