Π ΠΏΡΡΠ½ΠΈΡΡ 2-Π³ΠΎ Π°Π²Π³ΡΡΡΠ° Π²ΡΡΠ΅Π» ΡΠ΅Π»ΠΈΠ· re2c — ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² C ΠΈ C++. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ re2c Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π² 1993 Π³ΠΎΠ΄Ρ ΠΠΈΡΠ΅ΡΠΎΠΌ ΠΠ°ΠΌΠ±ΡΠ»ΠΈΡΠΎΠΌ ΠΊΠ°ΠΊ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΡΡ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΉΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠΊΠΎΡΠΎΡΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Π²ΡΡΡΠΈΠ²Π°ΡΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΠΊΠΎΠ΄ΠΎΠ²ΡΡ Π±Π°Π·Ρ. Π‘ ΡΠ΅Ρ ΠΏΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠΎΠΉ Π΄Π»Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΎΠ².
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ΡΡΠ²Π° Π² Π²Π΅ΡΡΠΈΠΈ 1.2:
-
ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ (ΡΠΏΡΠΎΡΡΠ½Π½ΡΠΉ) ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ
(Π°Π½Π³Π». «EOF rule»).
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ re2c:eof,
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ»,
ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ $, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π΅ΡΠ»ΠΈ Π»Π΅ΠΊΡΠ΅Ρ
ΡΡΠΏΠ΅ΡΠ½ΠΎ Π΄ΠΎΡΡΠΈΠ³ ΠΊΠΎΠ½ΡΠ° Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ re2c ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π° Π²ΡΠ±ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°
ΠΊΠΎΠ½Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π²Π°ΡΡΠΈΡΡΡΡΠΈΡ ΡΡ ΠΏΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΡΡΠΎΡΠ΅
ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎΠ²ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠ·Π²Π°Π½ ΡΠΏΡΠΎΡΡΠΈΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈ ΡΡΠΎΠΌ
ΠΎΡΡΠ°Π²Π°ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡΠΌ. Π‘ΡΠ°ΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ
ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ . -
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ
/*!include:re2c "file.re" */, Π³Π΄Π΅ file.re
ΡΡΠΎ ΠΈΠΌΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Re2c ΠΈΡΠ΅Ρ ΡΠ°ΠΉΠ»Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π°,
Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΡΠ΅ΠΉ Π·Π°Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΈ -I.
ΠΠΊΠ»ΡΡΡΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ³ΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ.
Re2c ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ «ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅» ΡΠ°ΠΉΠ»Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ include/
ΠΏΡΠΎΠ΅ΠΊΡΠ° — ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌ Π±ΡΠ΄ΡΡ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ
ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΡΡΠΎ-ΡΠΎ Π² Π΄ΡΡ Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΠΊΠ° ΡΡΠΎ ΠΏΠΎ ΠΏΡΠΎΡΡΠ±Π°ΠΌ ΡΡΡΠ΄ΡΡΠΈΡ ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠ» Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ Unicode. -
ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ
ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΡΠΈΠΉ -t —type-header (ΠΈΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ) ΠΈ Π½ΠΎΠ²ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² /*!header:re2c:on*/ ΠΈ
/*!header:re2c:off*/. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΡΠ»ΡΡΠ°ΡΡ ,
ΠΊΠΎΠ³Π΄Π° re2c Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΡΡΠΊΡΡΡ ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²,
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ Π² Π΄ΡΡΠ³ΠΈΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ. -
Re2c ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ UTF8-Π»ΠΈΡΠ΅ΡΠ°Π»Ρ ΠΈ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ .
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, re2c ΠΏΠ°ΡΡΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠΎΠ΄Π΅ "βx βy" ΠΊΠ°ΠΊ.
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ 1-Π±ΠΈΡΠ½ΡΡ ASCII-ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² e2 88 80 78 20 e2 88 83 79
(hex-ΠΊΠΎΠ΄Ρ), ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ Unicode-ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²ΡΡΡΠ½ΡΡ:
"u2200x u2203y". ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (ΠΎ ΡΡΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠ΅ Π±Π°Π³ ΡΠ΅ΠΏΠΎΡΡΡ). ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ
re2c ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠΏΡΠΈΡ —input-encoding <ascii | utf8>,
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΡΠΏΠ°ΡΡΠΈΡΡ "βx βy" ΠΊΠ°ΠΊ
2200 78 20 2203 79. -
Re2c ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ re2c-Π±Π»ΠΎΠΊΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ -r —reuse.
ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΎΠ², ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΠΈΠ· Π½ΠΈΡ
Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ. -
ΠΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΎΠ²ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ —location-format <gnu | msvc>. GNU-ΡΠΎΡΠΌΠ°Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ
ΠΊΠ°ΠΊ filename:line:column:, Π° MSVC-ΡΠΎΡΠΌΠ°Ρ — ΠΊΠ°ΠΊ filename(line,column).
ΠΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ Π»ΡΠ±ΠΈΡΠ΅Π»ΡΠΌ IDE.
Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠΏΡΠΈΡ —verbose, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΏΠΎΠ±Π΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π°. -
ΠΡΠ» Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ΅ΠΆΠΈΠΌ «ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ» Ρ flex — ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π·Π±ΠΎΡΠ° ΠΈ
Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π² ΡΠ΅Π΄ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ .
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠΈΡ -F —flex-support ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄
Π²ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠΊΡ Π² ΡΡΠΈΠ»Π΅ flex ΠΈ Π² ΡΡΠΈΠ»Π΅ re2c, ΡΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ.
Π Π΅ΠΆΠΈΠΌ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ flex ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅,
Π½ΠΎ re2c ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. -
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ Π²ΡΡΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² / ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ
Π΄ΠΎ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΡΠΈΡΠ»Π΅ ΡΠ»ΡΡΠ°Π΅Π²,
Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ UTF8). -
ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎ: re2c ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»
ΠΈ ΠΏΠΈΡΠ΅Ρ Π² Π½Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π° ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ
ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ. -
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±ΡΠ»Π° Π΄ΠΎΠΏΠΈΡΠ°Π½Π° ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π°; Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅
Π³Π»Π°Π²Ρ ΠΏΡΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°
ΠΈ ΠΏΡΠΎ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ²Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΎΠ±ΡΠ°Π½Π° Π² Π²ΠΈΠ΄Π΅
ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΠ΅ΠΉΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π½ΡΠ°Π»Π°
Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ (ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π² manpage ΠΈ Π² ΠΎΠ½Π»Π°ΠΉΠ½-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ).
ΠΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ ΡΠ»Π°Π±ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ»ΡΡΡΠΈΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΡΠ°ΠΉΡΠ° Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π°Ρ . -
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², re2c ΠΎΠ±Π·Π°Π²ΡΠ»ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ
ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΠΊΠ»ΡΡΡΠ½ Π² ΡΠ΅Π»ΠΈΠ·Π½ΡΡ ΡΠ±ΠΎΡΠΊΠ°Ρ ΠΈ
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ configure-ΠΎΠΏΡΠΈΠΈ —enable-debug.
ΠΡΠΎΡ ΡΠ΅Π»ΠΈΠ· Π·Π°Π½ΡΠ» Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ — ΠΏΠΎΡΡΠΈ ΡΠ΅Π»ΡΠΉ Π³ΠΎΠ΄.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, ΡΡΠ»ΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π±Π°Π·Ρ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΡΡΠ°ΡΡΠΈ «Efficient POSIX Submatch Extraction on NFA».
ΠΠ»Π³ΠΎΡΠΈΡΠΌΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠ°ΡΡΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ libre2c
(ΡΠ±ΠΎΡΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² Π²ΡΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ configure-ΠΎΠΏΡΠΈΠ΅ΠΉ
—enable-libs). ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π΄ΡΠΌΠ°Π½Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ
ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ Π²ΡΠΎΠ΄Π΅ RE2, Π° ΠΊΠ°ΠΊ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠ°Ρ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ° Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΌ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² re2c ΠΈΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
).
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ² ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΡΠ·ΡΠΊΠ°ΠΌ.
CΠΏΠ°ΡΠΈΠ±ΠΎ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² re2c Π²ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΏΠΎΠΌΠΎΠ³ ΡΡΠΎΠΌΡ ΡΠ΅Π»ΠΈΠ·Ρ ΡΠΎΡΡΠΎΡΡΡΡΡ,
ΠΈ Π² ΡΠ΅Π»ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ Π·Π° ΠΈΠ΄Π΅ΠΈ, Π±Π°Π³ ΡΠ΅ΠΏΠΎΡΡΡ, ΠΏΠ°ΡΡΠΈ, Π±ΠΎΠ΅Π²ΠΎΠΉ Π΄ΡΡ
ΠΈ Ρ.Π΄. ;]
ΠΡΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru