2์ 2์ผ ๊ธ์์ผ, C ๋ฐ C++ ์ธ์ด์ฉ ์ดํ ๋ถ์๊ธฐ ๋ฌด๋ฃ ์์ฑ๊ธฐ์ธ re2c๊ฐ ์ถ์๋์์ต๋๋ค. Re1993c๋ XNUMX๋ Peter Bamboulis๊ฐ ๋งค์ฐ ๋น ๋ฅธ ์ดํ ๋ถ์๊ธฐ์ ์คํ์ ์์ฑ๊ธฐ๋ก ์์ฑํ์ผ๋ฉฐ, ์์ฑ๋ ์ฝ๋์ ์๋์ ๋ถ์๊ธฐ๋ฅผ ๊ธฐ์กด ์ฝ๋ ๊ธฐ๋ฐ์ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๋ด์ฅํ ์ ์๋ ๋งค์ฐ ์ ์ฐํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ก ๋ค๋ฅธ ์์ฑ๊ธฐ์ ๊ตฌ๋ณ๋ฉ๋๋ค. ๊ทธ ์ดํ๋ก ์ด ํ๋ก์ ํธ๋ ์ปค๋ฎค๋ํฐ์ ์ํด ๊ฐ๋ฐ๋์์ผ๋ฉฐ ํ์ ๋ฌธ๋ฒ ๋ฐ ์ ํ ์ํ ๊ธฐ๊ณ ๋ถ์ผ์ ์คํ๊ณผ ์ฐ๊ตฌ๋ฅผ ์ํ ํ๋ซํผ์ผ๋ก ๊ณ์ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๋ฒ์ 1.2์ ์ฃผ์ ํ์ ์ฌํญ:
-
์ ๋ ฅ ๋ฐ์ดํฐ์ ๋์ ํ์ธํ๋ ์๋ก์ด(๊ฐ์ํ๋) ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ต๋๋ค.
(์์ด โEOF ๊ท์นโ).
์ด๋ฅผ ์ํด re2c:eof ๊ตฌ์ฑ์ด ์ถ๊ฐ๋์์ต๋๋ค.
ํฐ๋ฏธ๋ ๋ฌธ์๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์ดํ ๋ถ์๊ธฐ๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ ์คํ๋๋ ํน์ $ ๊ท์น
์ ๋ ฅ ๋ฐ์ดํฐ์ ๋์ ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌํ์ต๋๋ค.
์ญ์ฌ์ ์ผ๋ก re2c๋ ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์ ํํ ์ ์์ต๋๋ค.
์ ํ, ํจ์จ์ฑ ๋ฐ ๋จ์์ฑ์ด ๋ค์ํ ์ ๋ ฅ ๋
์์ฉ ํ๋ก๊ทธ๋จ. ์๋ก์ด ๋ฐฉ๋ฒ์ ์ฝ๋ ์์ฑ์ ๋จ์ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
ํจ๊ณผ์ ์ด๊ณ ๋๋ฆฌ ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์๋ ๋ฐฉ์
์ฌ์ ํ ์๋ํ๋ฉฐ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ ํธ๋ ์ ์์ต๋๋ค. -
์ง์๋ฌธ์ ์ฌ์ฉํ์ฌ ์ธ๋ถ ํ์ผ์ ํฌํจํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
/*!include:re2c "file.re" */ ์ฌ๊ธฐ์ file.re
์ด๋ ํฌํจ ํ์ผ์ ์ด๋ฆ์ ๋๋ค. Re2c๋ ํฌํจ ํ์ผ ๋๋ ํฐ๋ฆฌ์์ ํ์ผ์ ์ฐพ์ต๋๋ค.
-I ์ต์ ์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ๊ฒฝ๋ก ๋ชฉ๋ก์๋ ํ์๋ฉ๋๋ค.
ํฌํจ๋ ํ์ผ์๋ ๋ค๋ฅธ ํ์ผ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
Re2c๋ include/ ๋๋ ํ ๋ฆฌ์ "ํ์ค" ํ์ผ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ก์ ํธ - ์ ์ฉํ ์ ์๊ฐ ๊ฑฐ๊ธฐ์ ์ถ์ ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค.
ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ์ ๊ท์์ ๋๋ค.
์ง๊ธ๊น์ง ์์ ์์ ์์ฒญ์ ๋ฐ๋ผ ์ ๋์ฝ๋ ๋ฒ์ฃผ ์ ์๊ฐ ํฌํจ๋ ํ์ผ ํ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. -
์์์ ํค๋ ํ์ผ์ ์์ฑํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
-t --type-header ์ต์ ์ ์ฌ์ฉํ๋ ์ฝํ ์ธ (๋๋ ์ ์ ํ
๊ตฌ์ฑ) ๋ฐ ์๋ก์ด ์ง์๋ฌธ /*!header:re2c:on*/ ๋ฐ
/*!ํค๋:re2c:์คํ*/. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค.
re2c๊ฐ ๋ณ์, ๊ตฌ์กฐ ๋ฐ ๋งคํฌ๋ก์ ์ ์๋ฅผ ์์ฑํด์ผ ํ ๋,
๋ค๋ฅธ ๋ฒ์ญ ๋จ์์ ์ฌ์ฉ๋ฉ๋๋ค. -
Re2c๋ ์ด์ ์ ๊ท์์ UTF8 ๋ฆฌํฐ๋ด๊ณผ ๋ฌธ์ ํด๋์ค๋ฅผ ์ดํดํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก re2c๋ "โx โy"์ ๊ฐ์ ํํ์์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
1๋นํธ ASCII ๋ฌธ์ ์ํ์ค e2 88 80 78 20 e2 88 83 79
(XNUMX์ง์ ์ฝ๋)์ด๋ฉฐ ์ฌ์ฉ์๋ ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์ด์ค์ผ์ดํํด์ผ ํฉ๋๋ค.
"u2200x u2203y". ์ด๊ฒ์ ๋ง์ ์ฌ๋๋ค์๊ฒ ๋งค์ฐ ๋ถํธํ๊ณ ์์์น ๋ชปํ ์ผ์ ๋๋ค.
(์ง์์ ์ธ ๋ฒ๊ทธ ๋ณด๊ณ ๋ก ์ ์ฆ๋จ) ๊ทธ๋์ ์ง๊ธ
re2c๋ --input-encoding ์ต์ ์ ์ ๊ณตํฉ๋๋ค ,
์ด๋ฅผ ํตํด ๋์์ ๋ณ๊ฒฝํ๊ณ "โx โy"๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์์ต๋๋ค.
2200 78 20 2203 79. -
์ด์ Re2c๋ฅผ ์ฌ์ฉํ๋ฉด -r --reuse ๋ชจ๋์์ ์ผ๋ฐ re2c ๋ธ๋ก์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ๋ ฅ ํ์ผ์ ๋ง์ ๋ธ๋ก์ด ํฌํจ๋์ด ์๊ณ ๊ทธ ์ค ์ผ๋ถ๋ง ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ํธ๋ฆฌํฉ๋๋ค.
์ฌ์ฌ์ฉ์ด ํ์ํฉ๋๋ค. -
์ด์ ๊ฒฝ๊ณ ๋ฐ ์ค๋ฅ ๋ฉ์์ง์ ํ์์ ์ค์ ํ ์ ์์ต๋๋ค
์๋ก์ด --location-format ์ต์ ์ฌ์ฉ . GNU ํ์์ด ํ์๋ฉ๋๋ค
ํ์ผ ์ด๋ฆ:์ค:์ด: ๋ฐ MSVC ํ์์ ํ์ผ ์ด๋ฆ(์ค,์ด)์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ IDE ์ ํธ๊ฐ์๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
--verbose ์ต์ ๋ ์ถ๊ฐ๋์ด ์ฑ๊ณตํ ๊ฒฝ์ฐ ์งง์ ์น๋ฆฌ ๋ฉ์์ง๋ฅผ ์ธ์ํฉ๋๋ค. -
flex์ "ํธํ์ฑ" ๋ชจ๋๊ฐ ๊ฐ์ ๋์์ต๋๋ค. ์ผ๋ถ ๊ตฌ๋ฌธ ๋ถ์ ์ค๋ฅ๊ฐ ์์ ๋์์ผ๋ฉฐ
๋๋ฌธ ๊ฒฝ์ฐ์ง๋ง ์ฐ์ฐ์ ์ฐ์ ์์๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.
์ญ์ฌ์ ์ผ๋ก -F --flex-support ์ต์ ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค.
flex ์คํ์ผ๊ณผ re2c ์คํ์ผ์ด ํผํฉ๋์ด ์์ด ๊ตฌ๋ฌธ ๋ถ์์ด ์ฝ๊ฐ ์ด๋ ต์ต๋๋ค.
Flex ํธํ ๋ชจ๋๋ ์ ์ฝ๋์์๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ re2c๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด ๊ณ์ ์ง์ํฉ๋๋ค. -
์ด์ ๋ฌธ์ ํด๋์ค ๋นผ๊ธฐ ์ฐ์ฐ์ /๊ฐ ์ ์ฉ๋ฉ๋๋ค.
๋ ๋ง์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ์ธ์ฝ๋ฉ์ ํ์ฅํ๊ธฐ ์ ์,
๊ฐ๋ณ ๋ฌธ์ ๊ธธ์ด ์ธ์ฝ๋ฉ์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ(์: UTF8) -
์ด์ ์ถ๋ ฅ ํ์ผ์ด ์์์ ์ผ๋ก ์์ฑ๋ฉ๋๋ค. re2c๋ ๋จผ์ ์์ ํ์ผ์ ์์ฑํฉ๋๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ฌ๊ธฐ์ ์ด ๋ค์ ์์ ํ์ผ์ ์ด๋ฆ์ ์ถ๋ ฅ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
ํ๋์ ์์ . -
๋ฌธ์๊ฐ ์์ฑ๋๊ณ ๋ค์ ์์ฑ๋์์ต๋๋ค. ํนํ ์๋ก์ด ๊ฒ์ด ์ถ๊ฐ๋์์ต๋๋ค
์ฑํฐ ๋ฒํผ ์ฑ์ฐ๊ธฐ์ ๋ํด
ะธ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ํด.
์ ๋ฌธ์๋ ๋ค์ ํ์์ผ๋ก ์์ง๋ฉ๋๋ค.
ํฌ๊ด์ ์ธ ํ ํ์ด์ง์ง๋ฆฌ ๋งค๋ด์ผ
์์ ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค(๋์ผํ ์์ค๊ฐ ๋งจํ์ด์ง์ ์จ๋ผ์ธ ์ค๋ช ์์ ๋ ๋๋ง๋์ด ์์ต๋๋ค).
ํด๋ํฐ์์ ์ฌ์ดํธ์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ ค๋ ์๋๋ ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์์์ต๋๋ค. -
๊ฐ๋ฐ์์ ๊ด์ ์์ re2c๋ ๋ณด๋ค ์์ ํ ํ์ ์์คํ ์ ํ๋ํ์ต๋๋ค.
๋๋ฒ๊น ์ด์ ๋ฆด๋ฆฌ์ค ๋น๋์์๋ ๋๋ฒ๊น ์ฝ๋๊ฐ ๋นํ์ฑํ๋๊ณ
๊ตฌ์ฑ ์ต์ --enable-debug๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฑํํ ์ ์์ต๋๋ค.
์ด ๋ฆด๋ฆฌ์ค์๋ ๊ฑฐ์ XNUMX๋
์ด ๊ฑธ๋ ธ์ต๋๋ค.
์ธ์ ๋ ๊ทธ๋ ๋ฏ์ด ๋๋ถ๋ถ์ ์๊ฐ์ ์ด๋ก ์ ํ์ ๊ฐ๋ฐํ๊ณ ๊ธ์ ์ฐ๋ ๋ฐ ์๋น๋์์ต๋๋ค.
์กฐํญ "NFA์์ ํจ์จ์ ์ธ POSIX ๋ถ๋ถ ์ผ์น ์ถ์ถ".
๊ธฐ์ฌ์ ์ค๋ช
๋ ์๊ณ ๋ฆฌ์ฆ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ libre2c์์ ๊ตฌํ๋ฉ๋๋ค.
(๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋ฒค์น๋งํฌ ๊ตฌ์ถ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์์ผ๋ฉฐ ๊ตฌ์ฑ ์ต์
์ ์ํด ํ์ฑํ๋ฉ๋๋ค.
--ํ์ฑํ-libs). ๋์๊ด์ ๊ธฐ์กด ๋์๊ด์ ๊ฒฝ์์๋ก ์ธ์๋์ง ์์ต๋๋ค.
RE2์ ๊ฐ์ ํ๋ก์ ํธ์ด์ง๋ง ์๋ก์ด ๊ฐ๋ฐ์ ์ํ ์ฐ๊ตฌ ํ๋ซํผ์ผ๋ก
์๊ณ ๋ฆฌ์ฆ(re2c ๋๋ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์)
๋ํ ํ
์คํธ, ๋ฒค์น๋งํฌ ๋ฐ ๋ค๋ฅธ ์ธ์ด์ ๋ํ ๋ฐ์ธ๋ฉ ์์ฑ์ ๊ด์ ์์๋ ํธ๋ฆฌํฉ๋๋ค.
์ด๋ฒ ์ถ์๋ฅผ ๋์ด ๋ชจ๋ ๋ถ๋ค๊ป re2c ๊ฐ๋ฐ์๋ค์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์์ด๋์ด, ๋ฒ๊ทธ ๋ณด๊ณ ์, ํจ์น, ์ฌ๊ธฐ ๋ฑ์ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์ปค๋ฎค๋ํฐ์ ์ ๊ณต๋ฉ๋๋ค. ;]
์ถ์ฒ : linux.org.ru