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

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

์ถœ์‹œ ์ค€๋น„์—๋Š” ๊ฑฐ์˜ XNUMX๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ๋‚˜ ๊ทธ๋ ‡๋“ฏ์ด ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์€ ์ด๋ก ์  ํ‹€์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๊ธ€์„ ์“ฐ๋Š” ๋ฐ ์†Œ๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ์‚ฌ "NFA์—์„œ ํšจ์œจ์ ์ธ POSIX ๋ถ€๋ถ„ ์ผ์น˜ ์ถ”์ถœ".
๊ธฐ์‚ฌ์— ์„ค๋ช…๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‹คํ—˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ libre2c์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์ถ• ๋ฐ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ตฌ์„ฑ ์˜ต์…˜ โ€œโ€”enable-libsโ€์— ์˜ํ•ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค). ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” RE2์™€ ๊ฐ™์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์Ÿ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์—ฐ๊ตฌ ํ”Œ๋žซํผ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
์•Œ๊ณ ๋ฆฌ์ฆ˜(re2c ๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ) ๋˜ํ•œ ํ…Œ์ŠคํŠธ, ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๋‹ค๋ฅธ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ ์ƒ์„ฑ์˜ ๊ด€์ ์—์„œ๋„ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ re2c 1.2์˜ ์ฃผ์š” ํ˜์‹  ์‚ฌํ•ญ:

  • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋‹จ์ˆœํ™”๋œ ๋ฐฉ๋ฒ•("EOF ๊ทœ์น™")์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด "re2c:eof" ๊ตฌ์„ฑ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ํ„ฐ๋ฏธ๋„ ๋ฌธ์ž๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์–ดํœ˜ ๋ถ„์„๊ธฐ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ํŠน์ˆ˜ ๊ทœ์น™ "$"
    ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋์— ์„ฑ๊ณต์ ์œผ๋กœ ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์—ญ์‚ฌ์ ์œผ๋กœ re2c๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ œํ•œ, ํšจ์œจ์„ฑ ๋ฐ ๋‹จ์ˆœ์„ฑ์ด ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ๋
    ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ. ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ ์ž‘์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    ํšจ๊ณผ์ ์ด๊ณ  ๋„๋ฆฌ ์ ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜›๋‚  ๋ฐฉ์‹
    ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋ฉฐ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์„ ํ˜ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    "/*!include:re2c "file.re" */", ์—ฌ๊ธฐ์„œ "file.re"๋Š” ํฌํ•จํ•  ํŒŒ์ผ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Re2c๋Š” ํฌํ•จ ํŒŒ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.
    "-I" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ๊ฒฝ๋กœ ๋ชฉ๋ก์—๋„ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
    ํฌํ•จ๋œ ํŒŒ์ผ์—๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Re2c๋Š” "include/" ๋””๋ ‰ํ† ๋ฆฌ์— "ํ‘œ์ค€" ํŒŒ์ผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    ํ”„๋กœ์ ํŠธ - ์œ ์šฉํ•œ ์ •์˜๊ฐ€ ๊ฑฐ๊ธฐ์— ์ถ•์ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.
    ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ์ •๊ทœ์‹์ž…๋‹ˆ๋‹ค.
    ์ง€๊ธˆ๊นŒ์ง€ ์ž‘์—…์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ”์ฃผ ์ •์˜๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ž„์˜์˜ ํ—ค๋” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    "-t --type-header" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ˜ํ…์ธ (๋˜๋Š” ์ ์ ˆํ•œ
    ๊ตฌ์„ฑ) ๋ฐ ์ƒˆ๋กœ์šด ์ง€์‹œ๋ฌธ "/*!header:re2c:on*/" ๋ฐ
    "/*!ํ—ค๋”:re2c:off*/". ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    re2c๊ฐ€ ๋ณ€์ˆ˜, ๊ตฌ์กฐ ๋ฐ ๋งคํฌ๋กœ์˜ ์ •์˜๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•  ๋•Œ,
    ๋‹ค๋ฅธ ๋ฒˆ์—ญ ๋‹จ์œ„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • Re2c๋Š” ์ด์ œ ์ •๊ทœ์‹์˜ UTF8 ๋ฆฌํ„ฐ๋Ÿด๊ณผ ๋ฌธ์ž ํด๋ž˜์Šค๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.
    ๊ธฐ๋ณธ์ ์œผ๋กœ re2c๋Š” "โˆ€x โˆƒy"์™€ ๊ฐ™์€ ํ‘œํ˜„์‹์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
    1๋น„ํŠธ ASCII ๋ฌธ์ž "e2 88 80 78 20 e2 88 83 79"์˜ ์‹œํ€€์Šค
    (XNUMX์ง„์ˆ˜ ์ฝ”๋“œ)์ด๋ฉฐ ์‚ฌ์šฉ์ž๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ด์Šค์ผ€์ดํ”„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    โ€œ\\u2200x \\u2203y.โ€ ์ด๊ฒƒ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งค์šฐ ๋ถˆํŽธํ•˜๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ž…๋‹ˆ๋‹ค.
    (์ง€์†์ ์ธ ๋ฒ„๊ทธ ๋ณด๊ณ ๋กœ ์ž…์ฆ๋จ) ๊ทธ๋ž˜์„œ ์ง€๊ธˆ
    re2c๋Š” "--input-encoding {ascii | utf8}",
    ์ด๋ฅผ ํ†ตํ•ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  "โˆ€x โˆƒy"๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ€œ2200 78 20 2203 79.โ€

  • ์ด์ œ Re2c์—์„œ๋Š” "-r --reuse" ๋ชจ๋“œ์—์„œ ์ผ๋ฐ˜ re2c ๋ธ”๋ก์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์ž…๋ ฅ ํŒŒ์ผ์— ๋งŽ์€ ๋ธ”๋ก์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๊ทธ ์ค‘ ์ผ๋ถ€๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ์žฌ์‚ฌ์šฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ œ ๊ฒฝ๊ณ  ๋ฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
    ์ƒˆ๋กœ์šด ์˜ต์…˜ "--location-format {gnu | msvc}". GNU ํ˜•์‹์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค
    "ํŒŒ์ผ ์ด๋ฆ„:์ค„:์—ด:"์ด๊ณ  MSVC ํ˜•์‹์€ "ํŒŒ์ผ ์ด๋ฆ„(์ค„, ์—ด)"์ž…๋‹ˆ๋‹ค.
    ์ด ๊ธฐ๋Šฅ์€ IDE ์• ํ˜ธ๊ฐ€์—๊ฒŒ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์„ฑ๊ณตํ•  ๊ฒฝ์šฐ ์งง์€ ์Šน๋ฆฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” "--verbose" ์˜ต์…˜๋„ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • flex์˜ "ํ˜ธํ™˜์„ฑ" ๋ชจ๋“œ๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ
    ๋“œ๋ฌธ ๊ฒฝ์šฐ์ง€๋งŒ ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ์—ญ์‚ฌ์ ์œผ๋กœ "-F --flex-suppor" ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    flex ์Šคํƒ€์ผ๊ณผ re2c ์Šคํƒ€์ผ์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ์–ด ๊ตฌ๋ฌธ ๋ถ„์„์ด ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
    Flex ํ˜ธํ™˜ ๋ชจ๋“œ๋Š” ์ƒˆ ์ฝ”๋“œ์—์„œ๋Š” ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜ re2c๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ณ„์† ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ œ ๋ฌธ์ž ํด๋ž˜์Šค ๋นผ๊ธฐ ์—ฐ์‚ฐ์ž "/"๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
    ๋” ๋งŽ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธ์ฝ”๋”ฉ์„ ํ™•์žฅํ•˜๊ธฐ ์ „์—,
    ๊ฐ€๋ณ€ ๋ฌธ์ž ๊ธธ์ด ์ธ์ฝ”๋”ฉ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: UTF8)

  • ์ด์ œ ์ถœ๋ ฅ ํŒŒ์ผ์ด ์›์ž์ ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. re2c๋Š” ๋จผ์ € ์ž„์‹œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ๊ฒฐ๊ณผ๋ฅผ ์—ฌ๊ธฐ์— ์“ด ๋‹ค์Œ ์ž„์‹œ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅ์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
    ํ•˜๋‚˜์˜ ์ž‘์—….

  • ๋ฌธ์„œ๊ฐ€ ์™„์„ฑ๋˜๊ณ  ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค
    ์— ๊ด€ํ•œ ์žฅ http://re2c.org/manual/manual.html#buffer-refilling ะทะฐะฟะพะปะฝะตะฝะธะต ะฑัƒั„ะตั€ะฐ
    ะธ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ๋์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด.
    ์ƒˆ ๋ฌธ์„œ๋Š” ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค.
    ํฌ๊ด„์ ์ธ ํ•œ ํŽ˜์ด์ง€์งœ๋ฆฌ ๊ฐ€์ด๋“œ
    ์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(๋™์ผํ•œ ์†Œ์Šค๊ฐ€ ๋งจํŽ˜์ด์ง€์™€ ์˜จ๋ผ์ธ ์„ค๋ช…์„œ์— ๋ Œ๋”๋ง๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค).
    ํœด๋Œ€ํฐ์—์„œ ์‚ฌ์ดํŠธ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋Š” ์‹œ๋„๋Š” ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ re2c๋Š” ๋ณด๋‹ค ์™„์ „ํ•œ ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ํš๋“ํ–ˆ์Šต๋‹ˆ๋‹ค.
    ๋””๋ฒ„๊น… ์ด์ œ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์—์„œ๋Š” ๋””๋ฒ„๊น… ์ฝ”๋“œ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜๊ณ 
    ๊ตฌ์„ฑ ์˜ต์…˜ "--enable-debug"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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