์ฝ 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 ์น ์ฌ์ดํธ๋ฅผ ๋ฌด๊ธฐํ ๊ณ์ ํธ์คํ ํ์ง ์์ต๋๋ค.
๋ด๊ฐ ์์ ์ด ๋ด์ฉ์ ๋ํด ์ง๋ฌธ์ด๋ ๋ฉ๋ชจ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด ๋ฌธ์ ์ ๋ํ ์๊ฒฌ์ ์์ ๋กญ๊ฒ ์ถ๊ฐํ์ธ์.
์ง๋ ๋ช ๊ฐ์ ๋์ 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๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ถ๋ถ ์์ ์๊ฐ์ ํ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ์ง๊ธ ๊ฐ๋ฐํ๋ ๋ฐ ์ฃผ๋ก ์ง์คํ๊ณ ์๋ ๊ฒ์ (๊ธฐ๋ฅํด์ผ ํ๋ ์์๋๋ก):
CXLang, Roxby ๋ฐ Xross์์ PEG.js๋ฅผ ์ฌ์ฉํ๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ํ์ฌ PEG.js๋ ์ผ๋ฐ ํ ์คํธ๋ก ๋ค์ํ ์์ฐ์ ๋ง๋ ๋ค์ PEG.js๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ๊ฐ๋ฐ์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๋ฐ ์ฌ์ฉ์ ์ ์ ์ปดํ์ผ๋ฌ๋ ๊ฒ์, ๊ธฐํ ํ๋ก๊ทธ๋จ/๋๊ตฌ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์ฝ๋๋ก ๋ณํํฉ๋๋ค.
์คํ ์์ค ํ๋ก์ ํธ์ ๋ํ ๊ทํ์ ๊ฒฝํ ์์ค์ ์ด๋ ์ ๋์ ๋๊น? ํนํ, PEG.js์ ํ์ ํ๋ ์คํ ์์ค ํ๋ก์ ํธ(์ฃผ๋ก ์ฌ์ฉ์ ์)๋ฅผ ์ ์งํ๊ฑฐ๋ ์ ์งํ๊ณ ์์ต๋๊น?
์๋์, ์ ๋ 2013๋ ๋ถํฐ ๊ฐ๋ณ์ธ์ผ๋ก ์ผํด์๊ธฐ ๋๋ฌธ์ ๋น๋์ค ๊ฒ์, ํ๊ตญ ๋๋ผ๋ง ๋๋ ๋ค์ํ C++/Node.js ํ๋ก์ ํธ(๋๋ถ๋ถ ์์์ ์ธ๊ธํ ํ๋ก์ ํธ)์์ ์์ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค. ๋ค๋ฅธ ์ฝ๋์๋ ๋ฏธ๋์ ์์ฉ ์ ํ์ ๋ง๋ค๊ธฐ ์ํด ๊ฐ๋ฐ ์ค์ธ ๊ฐ์ธ ํ๋ก์ ํธ์ ๋ํ ์ฝ๋๊ฐ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฉํฑ์ ๋ณด๊ดํ๊ณ ์์ต๋๋ค.
CXLang์ ์ด๋ฏธ ์คํ ์์ค์ด์ง๋ง(์ฌ๊ธฐ์ ๊ธฐ์ ๊ฑฐ์ ํ ์คํธํ์ง ์๊ณ ๊ณ์ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๋ค์ํ ๋ถ๋ถ์ด ์์ง GitHub์ ์ ๊ณต๋์ง ์์๊ธฐ ๋๋ฌธ์) ๋ด ๊ฒ์.
PEG.js๊ฐ ํ์ฌ ๋๋ฝ๋์๊ฑฐ๋ ์ ๋๋ก ํ์ง ์๊ณ ์๋ ์์ 5๊ฐ์ง ์ฌํญ์ด ๋ฌด์์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? ๋ํ ํ๋ก์ ํธ๋ฅผ ์ํํ๊ณ ์ถ์ ์์น๋ฅผ ์ค๋ช ํ ์ ์์ต๋๊น? 1๋ ์ ์ด๋์์ ๋ณด๊ณ ์ถ์ต๋๊น?
<strong i="27">@returns</strong> ...
๋๋ [returns = ...]
)ํ์ฌ PEG.js(์น์ฌ์ดํธ ๋๋ GitHub ๋ฆฌํฌ์งํ ๋ฆฌ์์)์ ๋ํด ๊ฐ์ฅ ๋จผ์ ์ฝ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PEG.js๋ ๋ฐ์ด๋ ์ค๋ฅ ๋ณด๊ณ ๊ธฐ๋ฅ์ผ๋ก ๋น ๋ฅธ ํ์๋ฅผ ์์ฑํ๋ JavaScript์ฉ ๊ฐ๋จํ ํ์ ์์ฑ๊ธฐ์ ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ๋ฐ์ดํฐ ๋๋ ์ปดํจํฐ ์ธ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ณํ๊ธฐ, ์ธํฐํ๋ฆฌํฐ, ์ปดํ์ผ๋ฌ ๋ฐ ๊ธฐํ ๋๊ตฌ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์์ ์ด์ ๋ฅผ ํด๊ฒฐํ๋ฉด ์ด ๋จ๋ฝ์ด ์ฝ์ํ๋ ๊ฒ์ ๋ท๋ฐ์นจํ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ฐ์๊ฐ ํ์๋ฅผ ๊ฐ๋ฐํ ๋ ๋ ๋ง์ ์์ ๋ฅผ ์ป์ ์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค.
์์งํ ๋งํด์ ํ์ฌ ์ผ์ ์ ๊ฐ์ํ ๋ 1๋ ํ๊ฐ ์ด๋จ์ง ์ ์ ์์ง๋ง PEG.js์ ๋ํ ๋ก๋๋งต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ๋ก๋๋งต์ ์ด์ ๋ ๋ด ์์ ๊ณผ ์ฌ์ฉ์ ๋ฌธ์ ๋ฅผ ๋ ์ฝ๊ฒ ๋๋๋ ๋ฐ ๋์์ด ๋๋ ๋์์ ํ์ ์์ฑ๊ธฐ์ ๋ํด ๋ ๋ง์ด ๋ฐฐ์ฐ๊ณ ๋ ๋์ ํ๋ฌ๊ทธ์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ณํํ๊ณ __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 ํ๋กํ)์ฉ์ผ๋ก ๊ฝค ๋ณต์กํ ํ์๋ฅผ ๋ง๋ค๊ณ ์์ผ๋ฉฐ ์ด๋ฏธ ๊ธฐ๋ฅ ๋ถ์กฑ์ ์ง๋ฉดํด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ํฐ ๋ฌธ๋ฒ ํ์ผ์ ์ฌ๋ฌ ๊ฐ์ ์์ ํ์ผ๋ก ๋ถํ ํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๊ทธ๋ฌํ ๊ตฌํ์ ๋๊ธฐ ์ํด ๋ด๊ฐ ๋ฌด์์ ํ ์ ์์ต๋๊น?
๊ทธ๋ฐ๋ฐ ์ ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์ด๋ ค ์์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ ๋ซ๋ ๊ฒ์ ์์๋ค. ์ง๊ธ ํ๊ณ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@dmajda๋ PEG.js ์ ๋ํด ๋ง์ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค. ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ์ด ํ๋ก์ ํธ๊ฐ ๊ณ์๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.