Pegjs: ์ƒˆ๋กœ์šด ์œ ์ง€์‚ฌ๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค

์— ๋งŒ๋“  2017๋…„ 05์›” 07์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pegjs/pegjs

์•ฝ 7๋…„ ์ „์— PEG.js๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ, ๊ทธ๊ฒƒ์ด ์ด๋ ‡๊ฒŒ ์„ฑ๊ณต์ ์ธ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ํ–‰๋ณตํ–ˆ์ง€๋งŒ ์ž‘๋…„ ์ •๋„๋ถ€ํ„ฐ ์˜์š•์ด ์ค„์–ด๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์•‰์•„์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์Šค์Šค๋กœ๋ฅผ ์„ค๋“ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ ์ฐจ์ ์œผ๋กœ PEG.js๊ฐ€ ๋” ์ด์ƒ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์ƒˆ๋กœ์šด PEG.js ๊ด€๋ฆฌ์ž๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ˆ„๊ตฌ๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํŒŒ์‹ฑ โ€‹โ€‹๋ฐ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ ์ž‘๋™ ๋ฐฉ์‹, ๊ฐ•๋ ฅํ•œ ๋™๊ธฐ ๋ถ€์—ฌ, ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜, PEG.js ๊ฐœ๋ฐœ( ํ˜„์žฌ ๋กœ๋“œ๋งต ๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)์„ ์–ด๋””๋กœ ์ด๋Œ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์—„๊ฒฉํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด ์˜์—ญ์—์„œ ์ƒ๋‹นํžˆ ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ์—๊ฒŒ PEG.js๋ฅผ ๋„˜๊ฒจ์ค„ ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ์žˆ๋Š”?

PEG.js๋ฅผ ์ธ์ˆ˜ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ์ด ๋ฌธ์ œ์— ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹น์‹ ์ด ์ ์ž„์ž๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•˜์„ธ์š” :-) ๋Œ“๊ธ€์„ ๊ฒ€ํ† ํ•˜๊ณ  5์›” ์ฃผ๋ง์— ์ƒˆ ๊ด€๋ฆฌ์ž๋ฅผ ๋ฐœํ‘œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 13โ€“14. ๊ทธ๋•Œ๊นŒ์ง€ ์ ์ ˆํ•œ ๊ด€๋ฆฌ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์œผ๋ฉด PEG.js๋Š” ๊ณต์‹์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–‘๋„๋œ ์ž์‚ฐ

์œ ์ง€ ๊ด€๋ฆฌ ์ด์ „์—๋Š” ๋‹ค์Œ ์ž์‚ฐ ์ด์ „์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๊ด€๋ฆฌ์ž๋Š” ํ˜„์žฌ ๋‚ด ๊ฐœ์ธ VPS์—์„œ ์‹คํ–‰ ์ค‘์ธ PEG.js ์›น์‚ฌ์ดํŠธ ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ด€๋ฆฌ์ž๊ฐ€ ์ž์‹ ์˜ ํ†ต์ œ ํ•˜์— ํ˜ธ์ŠคํŒ…์„ ์„ค์ •ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์–‘๋„ํ•œ ์งํ›„ pegjs.org ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ DNS ๋ ˆ์ฝ”๋“œ๊ฐ€ ๊ทธ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์žฌ๊ตฌ์„ฑํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ๋‚ด ๊ฐœ์ธ VPS์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฉฐ PEG.js ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฌด๊ธฐํ•œ ๊ณ„์† ํ˜ธ์ŠคํŒ…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๋‚ด๊ฐ€ ์œ„์— ์“ด ๋‚ด์šฉ์— ๋Œ€ํ•ด ์งˆ๋ฌธ์ด๋‚˜ ๋ฉ”๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

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

@dmajda๋Š” PEG.js ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณ„์†๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

์ง€๋‚œ ๋ช‡ ๊ฐœ์›” ๋™์•ˆ PEG.js๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ  ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์€ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๊ฐœ๋…์˜ ์ˆ˜๊ฐ€ ์ƒ๋‹นํžˆ ์ ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋Š” ์•ฝ๊ฐ„ ๊ฐ€๋ณ์ง€๋งŒ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ javascript.pegjs ์˜ˆ์ œ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด JavaScript ๋ฐฉ์–ธ์„ ์‹œ์ž‘ํ•˜์ง€๋„ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋•๋ถ„์— ์ž‘์—…๋Ÿ‰์ด ํฌ๊ฒŒ ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ์—์„œ ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ €์—๊ฒŒ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋Ÿฐ ๊ฒƒ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฝ์Ÿ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ณ„์†ํ•ด์„œ ์„ฑ์žฅํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋ฒ„์ „ 2.0์„ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ํ˜„์žฌ ์•ˆ์ •์ ์ด๋ผ๋ฉด ๋ฌธ์„œ๋ฅผ ์กฐ๊ธˆ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ ํ˜„๋Œ€ํ™”๋Š” ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ? ๋” ๋น ๋ฅด๊ฒŒ? ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ "์ตœ์‹ "? ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Make ๋Œ€์‹  Gulp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌ๋Š” ํ˜„์žฌ 1.0์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฑฐ์˜ 1.5๋กœ ๋น„์‹ธ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. "์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ"์€ 1.0์˜ ๋ชฉํ‘œ๊ฐ€ ๋„ˆ๋ฌด ํฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ˜„์žฌ๊ฐ€ 1.0์ด๋ผ๊ณ  ๋Š๋‚€๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ์ข‹์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€, ๋ชจ๋“  ๊ธฐ๋Šฅ ์ž‘์—… ๋“ฑ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด 1.0์ด "ํ•˜๋‚˜"์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. 2.0, 3.0 ๋“ฑ์ด ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

์œ ์ง€ ๋ณด์ˆ˜์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์‚ฌ์ดํŠธ, Google ๊ทธ๋ฃน ๋“ฑ์ด ๊ณ„์† ์‚ด์•„ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@mikeaustin ์˜๊ฒฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ์‹ ์†ํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค(์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Œ).

ํ˜„์žฌ ์ƒํƒœ์—์„œ ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ €์—๊ฒŒ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ดํ•‘์€ ์ •๊ทœ ํ‘œํ˜„์‹ ๋ฐ ๋‹ค์–‘ํ•œ ๋Œ€ํ™”ํ˜• ๋„๊ตฌ์— ๋„ˆ๋ฌด ๋ณต์žกํ•œ ์ž‘์€ ์–ธ์–ด/DSL ๊ตฌ๋ฌธ ๋ถ„์„๊ณผ ํ•จ๊ป˜ ์ง€๋ฐฐ์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜€์Šต๋‹ˆ๋‹ค. ์›๋ž˜ PEG๊ฐ€ ์ข‹์€ ๋ฌธ๋ฒ• ๊ตฌ๋ฌธ์„ ์ œ๊ณตํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ข‹์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” JavaScript ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— PEG.js๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ๋Š๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋Ÿฐ ๊ฒƒ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ž‘์—…์ด ๋กœ๋“œ๋งต์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ฒฝ์Ÿ์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ง€์Šจ , ๋‹ˆ ์–ด๋ฆฌ

๊ณ„์†ํ•ด์„œ ์„ฑ์žฅํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋ฒ„์ „ 2.0์„ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ? ํ˜„์žฌ ์•ˆ์ •์ ์ด๋ผ๋ฉด ๋ฌธ์„œ๋ฅผ ์กฐ๊ธˆ ๋” ์ถ”๊ฐ€ํ•˜์—ฌ ๊ทธ๋Œ€๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” PEG.js๊ฐ€ ํ˜„์žฌ ๊ธฐ๋Šฅ ์„ธํŠธ์— ์˜์›ํžˆ ์ •์ฒด๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”์–ด ๋ณ€๊ฒฝ ์—†์ด ๋น„๊ต์  ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค(#30, #38, #107, #45, #285). ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ต์‹ฌ ๊ฐœ๋…(#11, #217)์„ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๊ฑฐ๋‚˜ API๋ฅผ ๋ณ€๊ฒฝ(#327, #430)ํ•ด์•ผ ํ•˜๋Š” ์˜ค๋žœ ๋ฌธ์ œ/์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ๋งต์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ ํ˜„๋Œ€ํ™”๋Š” ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ? ๋” ๋น ๋ฅด๊ฒŒ? ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ "์ตœ์‹ "?

์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋” ์‰ฝ๊ณ  ์ตœ์‹  ์ƒํƒœ์ž…๋‹ˆ๋‹ค(์ด๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” PR ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค. ์ด์ „ ๊ธฐ์ˆ ๊ณผ ์ƒˆ ๊ธฐ์ˆ  ์‚ฌ์ด์— ์•ฝ๊ฐ„์˜ ์ƒ์‚ฐ์„ฑ ์ฐจ์ด๋งŒ ์žˆ์–ด๋„ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์˜ค๋ž˜๋˜์–ด ๋ณด์ด๋Š” ๊ฒฝ์šฐ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” ํ˜„์žฌ๊ฐ€ 1.0์ด๋ผ๊ณ  ๋Š๋‚€๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ์•ˆ์ •์ ์ด๊ณ  ์ข‹์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€, ๋ชจ๋“  ๊ธฐ๋Šฅ ์ž‘์—… ๋“ฑ์ž…๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด 1.0์ด "ํ•˜๋‚˜"์ผ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. 2.0, 3.0 ๋“ฑ์ด ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :-) 1.0์— ๋Œ€ํ•œ ์ œ ์ •์˜๋Š” ํ•ญ์ƒ "๋งŒ์กฑํ•  ๋•Œ"์˜€์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ๋“  ๊ฒฐ์ฝ” ์˜ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์ €๋ฅผ ๊ฐ€์žฅ ๊ดด๋กญํžˆ๋Š” ์ผ ๋Œ€์‹ ์— ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž๋ฅผ ๊ฐ€์žฅ ๊ดด๋กญํžˆ๋Š” ์ผ๊ณผ ํ˜„์‹ค ์„ธ๊ณ„์—์„œ PEG.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์˜ ์™„๋ฒฝ์ฃผ์˜์  ์„ฑ๊ฒฉ๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜๋‹ค.

1.0์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ์ƒˆ๋กœ์šด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/futagoza/epeg.js ๐Ÿ˜Š ( ๋‚˜์—ด๋œ ๊ธฐ๋Šฅ์˜ ๋Œ€๋ถ€๋ถ„์€ ํ˜„์žฌ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์ง€๋งŒ ํ•œ ์‹œ์  ๋˜๋Š” ๋‹ค๋ฅธ ์‹œ์ ์—์„œ ์ผ๋ถ€ ํฌํฌ ๋˜๋Š” ๊ด€๋ จ ์—†๋Š” ํ”„๋กœ์ ํŠธ์— ์žˆ์—ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ GitHub์— ์˜ฌ๋ฆฐ ์ ์ด ์—†์Œ)

๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์ง€ ๋งŒ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜ž

@dmajda๋Š” PEG.js ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ฐ์‚ฌ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณ„์†๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@futagoza ๋ช…ํ™•ํžˆ

๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ์–ด๋–ค ๋ฌธ์ œ?

@dmajda ์˜ˆ, ์œ ์ง€ ๊ด€๋ฆฌ์— ๊ด€์‹ฌ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜„

๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ ์–ด๋–ค ๋ฌธ์ œ?

๋‚ด ๋ง์€ ๋‚ด๊ฐ€ ๋ณดํ†ต ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฝ”๋”ฉํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์—์„œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ ๋‘ก๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์‚ฌ์–‘ ๋ฐ ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ, ๋Œ์ด์ผœ ๋ณด๋ฉด ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค ๐Ÿ˜†

@dmajda ์ €๋Š” ํ˜„์žฌ MSc ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ PEG.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์šฉํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํฅ๋ฏธ๋กญ๊ณ  ๋ฉ‹์ง„ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๊ฐ€์น˜ ์žˆ๋Š” PEG.js ์ƒ์†์ž๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@futagoza ๋ฌธ์ œ ์„ค๋ช…์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํŒŒ์‹ฑ ๋ฐ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ , ๊ฐ•ํ•œ ๋™๊ธฐ ๋ถ€์—ฌ, ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ ๊ฒฝํ—˜, PEG.js ๊ฐœ๋ฐœ์„ ์–ด๋””๋กœ ์ด๋Œ ๊ฒƒ์ธ์ง€(ํ˜„์žฌ ๋กœ๋“œ๋งต๊ณผ ์ผ์น˜ํ•˜๊ฑฐ๋‚˜ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ) ๋ช…ํ™•ํ•œ ์•„์ด๋””์–ด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜๊ฒฌ์—์„œ ePEG.js์— ๋Œ€ํ•œ ๋งํฌ๋งŒ ์ œ๊ณตํ–ˆ๋Š”๋ฐ, ๊ทธ ์ž์ฒด๋กœ๋Š” ๊ท€ํ•˜๊ฐ€ ์œ„์˜ ์„ค๋ช…์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ePEG.js์˜ TODO ๋ชฉ๋ก์€ ๊ท€ํ•˜๊ฐ€ ์–ด๋””๋กœ ๋ฆฌ๋“œ PEG.js ๊ฐœ๋ฐœ).

๋‚˜๋Š” ๋‹น์‹ ์ด ๋‹น์‹ ์˜ ์ž‘์—…๊ณผ ์›น ์กด์žฌ๊ฐ€ ์Šค์Šค๋กœ ๋งํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์–ดํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณด๊ณ  Twitter์™€ LinkedIn ๋งํฌ๋ฅผ ํด๋ฆญํ–ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ƒํ•˜๋‹ค. ๊ทธ ํ›„, ๋‚˜๋Š” ํฌ๊ธฐํ–ˆ๋‹ค. ePEG.js์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ ์œ„์‹œ๋ฆฌ์ŠคํŠธ ์ด์ƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์ฒด์ ์ธ ์งˆ๋ฌธ์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ๋‹น์‹ ์˜ ๋ฐฐ๊ฒฝ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠนํžˆ, ํŒŒ์„œ ๋ฐ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์— ๋Œ€ํ•œ ์ง€์‹ ์ˆ˜์ค€์€ ์–ด๋Š ์ •๋„์ž…๋‹ˆ๊นŒ? ์–ด๋””์„œ ๊ทธ ์ง€์‹์„ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?

  • PEG.js ์ž‘์—…์„ ํ•˜๊ฒŒ ๋œ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠนํžˆ ๊ฐœ์ธ ๋˜๋Š” ์—…๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ PEG.js(๋˜๋Š” ePEG.js)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? PEG.js๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ผ์ƒ ์—…๋ฌด์˜ ์ผ๋ถ€์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

  • ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๊ฒฝํ—˜ ์ˆ˜์ค€์€ ์–ด๋Š ์ •๋„์ž…๋‹ˆ๊นŒ? ํŠนํžˆ, PEG.js์— ํ•„์ ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ(์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ˆ˜)๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

  • PEG.js๊ฐ€ ํ˜„์žฌ ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ์ƒ์œ„ 5๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋˜ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 1๋…„์— ์–ด๋””์—์„œ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋‹น์‹ ์ด PEG.js์˜ ์˜ฌ๋ฐ”๋ฅธ ๋ฏธ๋ž˜ ๊ด€๋ฆฌ์ž๊ฐ€ ๋  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณด๊ณ  ํŠธ์œ„ํ„ฐ์™€ ๋งํฌ๋“œ์ธ ๋งํฌ๋ฅผ ํด๋ฆญํ–ˆ์ง€๋งŒ ๋‘˜ ๋‹ค ์ฃฝ์—ˆ์Šต๋‹ˆ๋‹ค

๊ทธ ์‚ฌ์ดํŠธ๋Š” 2010๋…„์— Vitron Prince๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ”์„ ๋•Œ ๋งŒ๋“  ์˜ˆ์ „ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋งํฌ๊ฐ€ ๋Œ€๋ถ€๋ถ„ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋” ์ด์ƒ ์œ ์ง€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ์‚ฌ์ดํŠธ/ํ”„๋กœํ•„๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์š”์ฆ˜ ๋‚ด๊ฐ€ ์˜จ๋ผ์ธ์— ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ์œ ์ผํ•œ ์กด์žฌ๋Š” GitHub์™€ PlayStation ๐Ÿ˜†์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ œ๊ฐ€ ์ „์ผ์ œ ๊ฐ„๋ณ‘์ธ์ด๋ผ๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


๋‹น์‹ ์˜ ๋ฐฐ๊ฒฝ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠนํžˆ, ํŒŒ์„œ ๋ฐ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์— ๋Œ€ํ•œ ์ง€์‹ ์ˆ˜์ค€์€ ์–ด๋Š ์ •๋„์ž…๋‹ˆ๊นŒ? ์–ด๋””์„œ ๊ทธ ์ง€์‹์„ ์–ป์—ˆ์Šต๋‹ˆ๊นŒ?

์š”์•ฝํ•˜์ž๋ฉด ์ง€๋‚œ 5๋…„ ๊ฐ„ ์Šค์Šค๋กœ ์ŠคํŠธ๋ง๊ณผ ๋ฒ„ํผ ํ† ํฐํ™”, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•˜๋ฉด์„œ AST๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๊ณ , ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ ์–ธ์–ด๋ฅผ ์ตœ์ ์˜ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ฃผ๋กœ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. JavaScript ๋ฐ C++, ์ปดํŒŒ์ผ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ํŒจ์Šค๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋™์‹œ์— ์ตœ์ƒ์˜ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ํŒจ์Šค์— ์„œ๋กœ ๋‹ค๋ฅธ AST ๋ฐฉ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์˜ ๊ฒฝ์šฐ, ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€ PEG.js์šฉ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์—ฐ๊ตฌํ•˜๊ณ  ์ˆซ์ž๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค๋Š” ์ง€์‹์„ ํ†ตํ•ด ๋ฐฐ์› ๊ธฐ ๋•Œ๋ฌธ์— String#charAt ๋ณด๋‹ค String#charCodeAt ๋ฅผ ์„ ํ˜ธ String#charAt . options.optimize = "size" ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ speed with accuracy ์— ์ค‘์ ์„ ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์„œ ์ƒ์„ฑ์˜ ์ด ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•  ๋™๊ธฐ๋ฅผ ์ „ํ˜€ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์‚ฌํ•ญ: ๊ฝค ๋งŽ์ด ๋ฐฐ์› ์ง€๋งŒ ์šฉ์–ด๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š


PEG.js ์ž‘์—…์„ ํ•˜๊ฒŒ ๋œ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠนํžˆ ๊ฐœ์ธ ๋˜๋Š” ์—…๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ PEG.js(๋˜๋Š” ePEG.js)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? PEG.js๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ผ์ƒ ์—…๋ฌด์˜ ์ผ๋ถ€์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์—ฌ๊ฐ€ ์‹œ๊ฐ„์— ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

PEG.js ์ž‘์—…์— ๋Œ€ํ•œ ์ €์˜ ๋™๊ธฐ๋Š” CXLang์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ฒŒ์ž„ ์—์„œ ์‚ฌ์šฉํ•  ๋‹ค์–‘ํ•œ ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐœ์ธ ๋ฐ ์—…๋ฌด ํ”„๋กœ์ ํŠธ ๋ชจ๋‘์— ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ePEG.js์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ PEG.js๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ์ž์œ  ์‹œ๊ฐ„์— ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ง€๊ธˆ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์ฃผ๋กœ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์€ (๊ธฐ๋Šฅํ•ด์•ผ ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ):

  • PEG.js ๋˜๋Š” https://github.com/futagoza/epeg.js
  • https://github.com/cx-lang/cx-lang
  • Roxby, C++ ๊ฒŒ์ž„ ์—”์ง„ ๋ฐ Node.js ๊ธฐ๋ฐ˜ SDK๋กœ ๋งค๋„๋Ÿฝ์ง€๋งŒ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ 3D ์„ธ๊ณ„ ๊ตฌ์ถ•
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฐ ๊ฒŒ์ž„์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ๋ชจ๋“œ ์‹œ์Šคํ…œ์ธ Xross M
  • ๊ฒŒ์ž„์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์ปดํŒจ๋‹ˆ์–ธ ์•ฑ์ธ Xross C
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ด์–ด ๋ฐ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ์ €์žฅ์— ์ค‘์ ์„ ๋‘” ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ ํด๋ก 
  • ํฌ์ผ“ ์›”๋“œ๋ฅผ ํ†ตํ•ฉํ•œ 1๊ฐœ์˜ ๋งค๋„๋Ÿฝ๊ณ  ๊ฑฐ๋Œ€ํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์„ธ๊ณ„๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ํ•˜๋Š” MMORPG ๊ฒŒ์ž„
  • ๋‚ด MMORPG์— ๋“ฑ์žฅํ•˜๋Š” ๋™์ผํ•œ ํฌ์ผ“ ์„ธ๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ผ๋ จ์˜ ์‹ฑ๊ธ€ ํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„

CXLang, Roxby ๋ฐ Xross์—์„œ PEG.js๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ PEG.js๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ๋กœ ๋‹ค์–‘ํ•œ ์ž์‚ฐ์„ ๋งŒ๋“  ๋‹ค์Œ PEG.js๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์˜ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ฒŒ์ž„, ๊ธฐํƒ€ ํ”„๋กœ๊ทธ๋žจ/๋„๊ตฌ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.


์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๊ฒฝํ—˜ ์ˆ˜์ค€์€ ์–ด๋Š ์ •๋„์ž…๋‹ˆ๊นŒ? ํŠนํžˆ, PEG.js์— ํ•„์ ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ(์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ˆ˜)๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ €๋Š” 2013๋…„๋ถ€ํ„ฐ ๊ฐ„๋ณ‘์ธ์œผ๋กœ ์ผํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋””์˜ค ๊ฒŒ์ž„, ํ•œ๊ตญ ๋“œ๋ผ๋งˆ ๋˜๋Š” ๋‹ค์–‘ํ•œ C++/Node.js ํ”„๋กœ์ ํŠธ(๋Œ€๋ถ€๋ถ„ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํ”„๋กœ์ ํŠธ)์—์„œ ์ž์œ  ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ฝ”๋“œ์—๋Š” ๋ฏธ๋ž˜์— ์ƒ์šฉ ์ œํ’ˆ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ ์ค‘์ธ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋žฉํ†ฑ์— ๋ณด๊ด€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

CXLang์€ ์ด๋ฏธ ์˜คํ”ˆ ์†Œ์Šค์ด์ง€๋งŒ(์—ฌ๊ธฐ์ €๊ธฐ์„œ ๊ฑฐ์˜ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ๊ฐœ๋ฐœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์ด ์•„์ง GitHub์— ์ œ๊ณต๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—) ๋‚ด ๊ฒŒ์ž„.


PEG.js๊ฐ€ ํ˜„์žฌ ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋Š” ์ƒ์œ„ 5๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋˜ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 1๋…„์— ์–ด๋””์—์„œ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

  • ePEG.js ๋˜๋Š” ๋Œ€์•ˆ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ์ด์œ  ๐Ÿ˜›
  • ํ˜„์žฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋Š” ํ˜„์žฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ๊ธฐ์—์„œ๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ์ปดํŒŒ์ผ๋Ÿฌ ํŒจ์Šค์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•˜์ง€๋งŒ ์ƒ์„ฑ๊ธฐ๋ฅผ ์œ„ํ•œ ์„ ํƒ์  ๋„์šฐ๋ฏธ์ž…๋‹ˆ๋‹ค.

    • ๋ชจ๋“  ์–ธ์–ด๋กœ ํŒŒ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋„๋ก ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ฐ AST๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ”Œ๋Ÿฌ๊ทธ์ธ๋ณ„).

    • ์˜ต์…˜์— ๋”ฐ๋ผ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์•ˆ๋‚ดํ•˜๋Š” ์„ ํƒ์  ๋ฐ”์ดํŠธ ์ฝ”๋“œ ์ƒ์„ฑ

  • PEG.js ๋ฌธ๋ฒ• ๊ตฌ๋ฌธ ๋‚ด์˜ ์ž‘์—… ๋ฐ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์™€ ์†Œ์Šค ์œ ํ˜•์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

    • ๊ทœ์น™์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์˜ ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์„ค์ •ํ•˜๋Š” ์†์„ฑ( <strong i="27">@returns</strong> ... ๋˜๋Š” [returns = ...] )

    • ์‹œํ€€์Šค ์„ ํƒ ๋ฐ ์ถ”์ถœ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ = ๋” ์ ์€ ์ž‘์—… ๋ฐ ํŠน์ • ์–ธ์–ด์— ๋Œ€ํ•œ ๋œ ์˜์กด

    • ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์„ ํ†ตํ•œ ๋ฒ„ํผ ์ง€์›, ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์†Œ์Šค ์ฝ”๋“œ ์ด์™ธ์˜ ํŒŒ์ผ์šฉ ํŒŒ์„œ ๊ฐœ๋ฐœ

  • ํŒŒ์„œ๋ฅผ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ:

    • PEG.js ๋ฌธ๋ฒ•์„ ์ ๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ

    • ๋‚ด๋ถ€ ํŒจ์Šค ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ถœ๋ ฅ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ(์‚ฌ์ „ ์ •์˜ ๋ฐ ์‚ฌ์šฉ์ž ์ •์˜)

    • ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ๊ทœ์น™์„ ์‰ฝ๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์—์„œ ๊ทœ์น™ ๊ฐ€์ ธ์˜ค๊ธฐ

  • ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์€ API๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ํŽธ์ง‘๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด PEG.js๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ ์นœํ™”์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ PEG.js(์›น์‚ฌ์ดํŠธ ๋˜๋Š” GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ)์— ๋Œ€ํ•ด ๊ฐ€์žฅ ๋จผ์ € ์ฝ์€ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

PEG.js๋Š” ๋›ฐ์–ด๋‚œ ์˜ค๋ฅ˜ ๋ณด๊ณ  ๊ธฐ๋Šฅ์œผ๋กœ ๋น ๋ฅธ ํŒŒ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” JavaScript์šฉ ๊ฐ„๋‹จํ•œ ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ปดํ“จํ„ฐ ์–ธ์–ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜๊ธฐ, ์ธํ„ฐํ”„๋ฆฌํ„ฐ, ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ๊ธฐํƒ€ ๋„๊ตฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ด์œ ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ์ด ๋‹จ๋ฝ์ด ์•ฝ์†ํ•˜๋Š” ๊ฒƒ์„ ๋’ท๋ฐ›์นจํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์„œ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋” ๋งŽ์€ ์ž์œ ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ ํ˜„์žฌ ์ผ์ •์„ ๊ฐ์•ˆํ•  ๋•Œ 1๋…„ ํ›„๊ฐ€ ์–ด๋–จ์ง€ ์•Œ ์ˆ˜ ์—†์ง€๋งŒ PEG.js์— ๋Œ€ํ•œ ๋กœ๋“œ๋งต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • __PEG.js v1__ - 0.11 ์ด์ •ํ‘œ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์„ ํฌํ•จํ•˜์ง€๋งŒ ๋‹ค์ค‘ ํŒŒ์ผ ์ง€์›
  • __PEG.js v1.x__ - ์œ ์ง€ ๋ฆด๋ฆฌ์Šค(ํ˜„์žฌ LTS)
  • __PEG.js v2.x__ - ECMAScript 2015๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„์˜ ๊ธฐ๋Šฅ ๋Œ€๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • __PEG.js v3.x__ - LTS ๋ฆด๋ฆฌ์Šค
  • __PEG.js v4.x__ - ECMAScript 2017 ์ฝ”๋“œ ๊ธฐ๋ฐ˜, ๋ฒ„ํผ ์ง€์›, ์ƒˆ๋กœ์šด ํ”Œ๋Ÿฌ๊ทธ์ธ ์ธํ„ฐํŽ˜์ด์Šค
  • __PEG.js v5.x__ - LTS ๋ฆด๋ฆฌ์Šค
  • __PEG.js v6.x__ - ECMAScript 20xx ์ฝ”๋“œ ๊ธฐ๋ฐ˜, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ , ์ƒˆ๋กœ์šด JavaScript ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ
  • __PEG.js v7.x__ - LTS ๋ฆด๋ฆฌ์Šค
  • __PEG.js v8.x__ - ECMAScript 20xx ์ฝ”๋“œ ๊ธฐ๋ฐ˜, ๋” ๋งŽ์€ ๋„์šฐ๋ฏธ ๋ฐ ์„ ํƒ์  ํŒจ์Šค, ํŽธ์ง‘๊ธฐ ์ค‘์‹ฌ ์ง€์›
  • __PEG.js v9.x__ - ์ตœ์ข… LTS ๋ฆด๋ฆฌ์Šค, ECMAScript 20xx+ ์ฝ”๋“œ ๊ธฐ๋ฐ˜

์ด ๋กœ๋“œ๋งต์˜ ์ด์œ ๋Š” ๋‚ด ์ž‘์—…๊ณผ ์‚ฌ์šฉ์ž ๋ฌธ์ œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋‚˜๋ˆ„๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋™์‹œ์— ํŒŒ์„œ ์ƒ์„ฑ๊ธฐ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ๋ฐฐ์šฐ๊ณ  ๋” ๋‚˜์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ณ„ํšํ•˜๊ณ  __PEG.js v4.x__ ๋ฐ __PEG์— ๋Œ€ํ•ด ์Šค์Šค๋กœ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ์ง€๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค. .js v6.x__

๋˜ํ•œ @dmajda ๋ฅผ ์–ธ๊ธ‰ Twitter ๊ณ„์ • ๋ฐ Google ๊ทธ๋ฃน ๊ณผ ๊ฐ™์€ ์ธก๋ฉด์„ ์ค‘์žฌ์ž์—๊ฒŒ ๋งก๊ธฐ๊ณ  ๋ฒค์น˜๋งˆํฌ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๊ธฐ์—ฌ์ž๋กœ๋ถ€ํ„ฐ ๋„์›€์„ ๋ฐ›๋Š” ๋ฐ˜๋ฉด ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” LTS ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋งˆํฌ๋‹ค์šด ํŒŒ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด peg๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜€

์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ด๊ณ  ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์กฐ์ง์— ํ•ฉ๋ฅ˜ํ•˜๋„๋ก ์ €๋ฅผ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

@futagoza ๋จผ์ € ๋‹ต๋ณ€์ด ๋Š๋ฆฐ ์  ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ง€๋‚œ ์ฃผ ๋™์•ˆ ๊ท€ํ•˜๊ฐ€ ์ž‘์„ฑํ•˜์‹  ๋‚ด์šฉ์„ ์ฝ๊ณ , ์ƒ๊ฐํ•˜๊ณ , ๋‹ต์žฅ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์—ฐ์†์ ์ธ ์‹œ๊ฐ„์„ ๋‚ด๊ธฐ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์“ด ๊ฒƒ์„ ๋ณด๋ฉด ๋‹น์‹ ์ด ์˜์š•์ด ๋„˜์น˜๊ณ  ์ž๊ฒฉ์ด ํƒ„ํƒ„ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PEG.js์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์•„์ด๋””์–ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์‹ํ•˜๋Š” PEG.js์˜ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๊ณผ๋„ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŠนํžˆ ๋‹น์‹ ์ด ๋” ๋งŽ์€ ๊ธฐ์—ฌ์ž๋“ค์„ ์ฐธ์—ฌ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์œ ์ง€ ๋ณด์ˆ˜๋กœ์„œ ๋‹ค์†Œ ์‹คํŒจํ•œ ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์กฐ๊ธˆ ๊ฑฑ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งŽ์€ ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์–ดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ PEG.js ์‚ฌ์šฉ์ž๊ฐ€ ๋‹จ์ˆœํ•จ์„ ๋†’์ด ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‹ค๋ฅธ ๋ˆ„๊ตฌ๋„ PEG.js๋ฅผ ์ธ์ˆ˜ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ PEG.js ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋กœ์จ PEG.js์˜ ์ƒˆ๋กœ์šด ๊ด€๋ฆฌ์ž๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค!

์ž ์‹œ ํ›„ ํŠธ์œ„ํ„ฐ์™€ Google ๊ทธ๋ฃน์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐœํ‘œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ ์ž์‚ฐ ์ด์ „์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „์†ก์ด ์™„๋ฃŒ๋˜๋ฉด ํ”„๋กœ์ ํŠธ์—์„œ ์™„์ „ํžˆ ๋ฌผ๋Ÿฌ๋‚˜๊ฒ ์Šต๋‹ˆ๋‹ค.

PEG.js๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜์…”์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์†์— ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ๋ฐ์•˜์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค :-)

์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ด๊ณ  ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์กฐ์ง์— ํ•ฉ๋ฅ˜ํ•˜๋„๋ก ์ €๋ฅผ ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

@ericjjj ์ œ์•ˆ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ œ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

@futagoza ๐Ÿ˜‚ ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ด๋ฉฐ ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์กฐ์ง์— ํ•ฉ๋ฅ˜ํ•˜๋„๋ก ์ดˆ๋Œ€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”!

@dmajda ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„ ์ตœ์„ ์„ ๋‹คํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ํฌ๋ฆฝ๋„ ๊ฑฑ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ๋กœ๋“œ๋งต์— LTS ์ผ์ •์„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์•„์ง ํ™•์ •๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@ericjjj m8 ์ œ์•ˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

๊ฐ€์žฅ ํ•ด์•ผ ํ•  ์ผ์ด ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์›น์‚ฌ์ดํŠธ๋Š” ์ด๋ฏธ ์—…๋ฐ์ดํŠธํ•  ์ผ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ „์†ก ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ์ž ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ์›น์‚ฌ์ดํŠธ์— ์•ฝ๊ฐ„์˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋ฉด ์›น์‚ฌ์ดํŠธ์˜ ์ €์žฅ์†Œ ์—์„œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด โ€‹โ€‹๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ณ€๊ฒฝ, ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•  ๊ณ„ํš์„ ๊ฒ€ํ† ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค ๋•Œ, ๋‚˜๋Š” ๋‹น์‹ ์„ ์–ธ๊ธ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๋‹น์‹ ์ด ์–ธ์ œ ๋›ฐ์–ด๋“ค์–ด ๋‹น์‹ ์˜ ์•„์ด๋””์–ด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋‹น์‹ ์˜ ์ƒ๊ฐ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›น์‚ฌ์ดํŠธ๋ฅผ ์–ด๋””๋กœ ๊ฐˆ์ง€ ๊ฒฐ์ •ํ•œ ํ›„, ์—ฌ์ „ํžˆ ์ €๋ฅผ ๋„์™€์ฃผ์‹ค ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด ์ดˆ๋Œ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜†

@futagoza ๋„ค , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜€

๋‚˜๋Š” ์กฐ์ง์— ์ถ”๊ฐ€๋˜๋ฉด ๊ธฐ์—ฌํ•  ๊ฒƒ์ด๋‹ค

๋” ํฐ ๋‹จ๊ณ„๋ณ„ ์ž์Šต์„œ๋ฅผ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ชจ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์ด ์ œ๊ฑฐ๋œ JavaScript์™€ ๊ฐ™์€ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ์–ธ์–ด๋Š” PEG.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ AST๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•„๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฐพ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ๋Š” ์ž‘์€ ๊ณ„์‚ฐ๊ธฐ์—์„œ ์™„์ „ํ•œ JavaScript ํŒŒ์„œ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์‚ฌ์ด์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ๊ณ  ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ์˜ˆ์‹œ ๊ธฐ์‚ฌ:
https://structura.quora.com/Extension-Methods-in-JavaScript

๊ทธ๋ž˜์„œ @futagoza ๋Š” ์ƒˆ๋กœ์šด PEG.js ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์™œ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๊นŒ?

BTW, ํ›Œ๋ฅญํ•œ ํ”„๋กœ์ ํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!
๋‚ด ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ ์ค‘ ํ•˜๋‚˜๋Š” C++๋กœ ์ž‘์„ฑ๋œ Pascal ์–ธ์–ด ํŒŒ์„œ์˜€์Šต๋‹ˆ๋‹ค.
JavaScript + PEG.js๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์ €๋Š” ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bash์™€ ๊ฐ™์€ ์–ธ์–ด(qmake ํ”„๋กœํ•„)์šฉ์œผ๋กœ ๊ฝค ๋ณต์žกํ•œ ํŒŒ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ ๊ธฐ๋Šฅ ๋ถ€์กฑ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ํฐ ๋ฌธ๋ฒ• ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌํ•œ ๊ตฌํ˜„์„ ๋•๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฐ๋ฐ ์™œ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋‹ซ๋Š” ๊ฒƒ์„ ์žŠ์—ˆ๋‹ค. ์ง€๊ธˆ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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