re2c ๋ ‰์„œ ์ƒ์„ฑ๊ธฐ 2.0 ์ถœ์‹œ

์ผ์–ด๋‚ฌ๋‹ค ์„๋ฐฉํ•˜๋‹ค re2c 2.0, C ๋ฐ C++ ์–ธ์–ด์šฉ ๋ฌด๋ฃŒ ์–ดํœ˜ ๋ถ„์„๊ธฐ ์ƒ์„ฑ๊ธฐ์ž…๋‹ˆ๋‹ค. re2c ํ”„๋กœ์ ํŠธ๋Š” ์›๋ž˜ 1993๋…„ Peter Bamboulis์— ์˜ํ•ด ๋งค์šฐ ๋น ๋ฅธ ์–ดํœ˜ ๋ถ„์„๊ธฐ์˜ ์‹คํ—˜์  ์ƒ์„ฑ๊ธฐ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ์˜ ์†๋„์™€ ๋ถ„์„๊ธฐ๋ฅผ ๊ธฐ์กด ์–ดํœ˜ ๋ถ„์„๊ธฐ์— ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋‚ด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ์œ ์—ฐํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‹ค๋ฅธ ์ƒ์„ฑ๊ธฐ์™€ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฒ ์ด์Šค. ๊ทธ ์ดํ›„๋กœ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์˜ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ ํ˜•์‹ ๋ฌธ๋ฒ• ๋ฐ ์œ ํ•œ ์ƒํƒœ ๊ธฐ๊ณ„ ๋ถ„์•ผ์˜ ์‹คํ—˜๊ณผ ์—ฐ๊ตฌ๋ฅผ ์œ„ํ•œ ํ”Œ๋žซํผ์œผ๋กœ ๊ณ„์† ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ :

  • Go ์–ธ์–ด์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(re2c์˜ "--lang go" ์˜ต์…˜ ๋˜๋Š” ๋ณ„๋„์˜ re2go ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ™œ์„ฑํ™”๋จ). C์™€ Go์— ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” ๋™์ผํ•œ ํ…์ŠคํŠธ์—์„œ ์ƒ์„ฑ๋˜์ง€๋งŒ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. re2c์˜ ์ฝ”๋“œ ์ƒ์„ฑ ํ•˜์œ„ ์‹œ์Šคํ…œ์ด ์™„์ „ํžˆ ์žฌ์„ค๊ณ„๋˜์–ด ํ–ฅํ›„ ์ƒˆ๋กœ์šด ์–ธ์–ด๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • CMake์— ๋Œ€์ฒด ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ถ”๊ฐ€(๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ligfx!). re2c๋ฅผ CMake๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์˜ค๋žซ๋™์•ˆ ์ด๋ฃจ์–ด์กŒ์ง€๋งŒ ligfx๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋ˆ„๊ตฌ๋„ ์™„์ „ํ•œ ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด์ „ Autotools ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ๊ณ„์† ์ง€์›๋˜๊ณ  ์‚ฌ์šฉ๋˜๋ฉฐ ๊ฐ€๊นŒ์šด ๋ฏธ๋ž˜์— ์ด๋ฅผ ํฌ๊ธฐํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค(๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋ฐฐํฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์ด์ „ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ƒˆ ๋นŒ๋“œ ์‹œ์Šคํ…œ๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ด๊ณ  ๋” ๊ฐ„๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ). ๋‘ ์‹œ์Šคํ…œ ๋ชจ๋‘ Travis CI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์†์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฉ๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜ API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ตฌ์„ฑ์— ์ธํ„ฐํŽ˜์ด์Šค ์ฝ”๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ API๋ฅผ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๋งคํฌ๋กœ ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ โ€œ@@{name}โ€ ํ˜•์‹์˜ ๋ช…๋ช…๋œ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ๊ฐ„๋‹จํžˆ โ€œ@@โ€(๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  ๋ชจํ˜ธ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์˜ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ์Šคํƒ€์ผ์€ re2c:api:style ๊ตฌ์„ฑ์— ์˜ํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค(ํ•จ์ˆ˜ ๊ฐ’์€ ๊ธฐ๋Šฅ์  ์Šคํƒ€์ผ์„ ์ง€์ •ํ•˜๊ณ  ์ž์œ  ํ˜•์‹์€ ์ž„์˜์˜ ์Šคํƒ€์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค).
  • "-c", "-start-conditions" ์˜ต์…˜์˜ ์ž‘๋™์ด ๊ฐœ์„ ๋˜์–ด ํ•˜๋‚˜์˜ re2c ๋ธ”๋ก์— ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ์—ฌ๋Ÿฌ ์–ดํœ˜ ๋ถ„์„๊ธฐ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์กฐ๊ฑด๋ถ€ ๋ธ”๋ก๊ณผ ํ•จ๊ป˜ ์ผ๋ฐ˜ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๊ณ  ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋ถ€ ๋ธ”๋ก์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "-c", "--start-conditions" ๋ฐ "-f", "--์™€ ํ•จ๊ป˜ "-r", "--reuse" ์˜ต์…˜(๋‹ค๋ฅธ ๋ธ”๋ก์—์„œ ํ•œ ๋ธ”๋ก์˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ)์˜ ํ–ฅ์ƒ๋œ ์ž‘๋™ ์ €์žฅ ๊ฐ€๋Šฅ ์ƒํƒœ" ์˜ต์…˜(์–ด๋Š ์ง€์ ์—์„œ๋‚˜ ์ค‘๋‹จ๋˜๊ณ  ๋‚˜์ค‘์— ๊ณ„์† ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ ์ €์žฅ ์–ดํœ˜ ๋ถ„์„๊ธฐ).
  • ์ตœ๊ทผ ์ถ”๊ฐ€๋œ EOF ๊ทœ์น™(end-of-input) ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋“œ๋ฌผ๊ฒŒ ์ค‘์ฒฉ ๊ทœ์น™์ด ์ž˜๋ชป ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹จ์ˆœํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ž์ฒด ์žฌ๊ตฌ์ถ•์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ ๋นŒ๋“œ๋œ re2c๋ฅผ ๋™์ ์œผ๋กœ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ž˜๋ชป๋œ ์ข…์†์„ฑ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค(์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋™์ ์ด์–ด์„œ ๋Œ€๋ถ€๋ถ„์˜ ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์ข‹์•„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ์ด์ œ ์–ดํœ˜ ๋ถ„์„๊ธฐ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  RE2C_FOR_BUILD ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€