ΠΠ° 19 Π½ΠΎΠ΅ΠΌΠ²ΡΠΈ, Π²ΡΠΎΡΠ½ΠΈΠΊ, Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ ΡΠ΅Π»ΠΈΠ· re2c β Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ (ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ Π² ΠΊΠΎΠ΄ Π½Π° ΡΠ΅Π»Π΅Π²ΠΈΡ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅). re2c ΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° Π² Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π±ΡΡΠ·ΠΈ ΠΈ Π»Π΅ΡΠ½ΠΎ Π²Π³ΡΠ°Π΄ΠΈΠΌΠΈ Π»Π΅ΠΊΡΠ΅ΡΠΈ. Π’ΠΎΠΉ ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° ΠΎΡ ΠΏΠΎ-ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ flex Ρ Π³ΡΠ²ΠΊΠ°Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π΅ΡΠ°Π±Π»ΠΈΡΠ½ΠΈ Π»Π΅ΠΊΡΠ΅ΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π·Π°Ρ Π²Π°Ρ (submatch extraction) Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΊΡΠ°ΠΉΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈ Ρ ΡΠ°Π³ΠΎΠ²Π΅ (TDFA). re2c ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π²Π°ΠΆΠ½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° Π»Π΅ΠΊΡΠ΅ΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Ninja ΠΈ Π² PHP.
Π ΡΠ΅Π»ΠΈΠ· 4.0 Π±Π΅ΡΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΎΡΠ΅ΠΌ Π½ΠΎΠ²ΠΈ Π΅Π·ΠΈΠΊΠ° (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig), Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ Π²Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ (C/C++, Go, Rust), ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΎΠ±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π΅Π·ΠΈΡΠΈ ΡΡΠ΅Π· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡΡ Π½Π° ΠΊΠΎΠ΄ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΡΠ°Π½ΡΠ»Π°ΡΠΈΡΡΠ° Π½Π° Π²Π΅ΡΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΊΡΠ°Π΅Π½ Π°Π²ΡΠΎΠΌΠ°Ρ Π² ΠΊΠΎΠ΄, ΡΠΎΠ΅ΡΡ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΡΠ΅Π»Π΅Π²ΠΈΡ Π΅Π·ΠΈΠΊ, ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, ΠΎΠ±ΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈ Ρ.Π½. ΠΠΎ-ΡΠ°Π½ΠΎ Π²ΡΠΈΡΠΊΠ°ΡΠ° ΡΠ°Π·ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π±Π΅ΡΠ΅ ΡΠ°ΡΡ ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° re2c, ΠΈ Π·Π° Π΄Π° Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ Π½ΠΎΠ² Π΅Π·ΠΈΠΊ, ΡΠ΅ Π½Π°Π»Π°Π³Π°ΡΠ΅ Π΄Π° ΠΏΠ°ΡΡΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ Π΄Π° ΡΠ΅ΡΠ³ΡΠ°Π΄ΠΈΡΠ΅ re2c. ΠΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΠ°ΡΡΠΈ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ°Ρ Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π±Π΅Π· ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ²Π°ΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ. Π‘Π΅Π³Π° ΡΡΠ»Π°ΡΠ° ΡΠ°Π·ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½Π° Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ β ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ re2c ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ). ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° re2c Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½ ΠΎΡ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π΅Π·ΠΈΠΊ ΠΈ ΡΠ°Π·ΡΠΈΡΠ° ΡΠ°ΠΌΠΎ Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈΡ ΡΠ°ΠΉΠ». ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π΄Π° ΠΏΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅Π½ ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ Π½ΠΎΠ² ΠΎΡ Π½ΡΠ»Π°ΡΠ°. ΠΠ° Π²ΡΠΈΡΠΊΠΈ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ Π΅Π·ΠΈΡΠΈ ΠΈΠΌΠ° ΠΏΡΠ»Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ.
ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, ΡΠ°ΠΌΠ°ΡΠ° ΠΈΠ΄Π΅Ρ Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²ΡΠ·Π½ΠΈΠΊΠ½Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠ΅Π½ΡΠ°Ρ Π½Π° ΠΠΠ , Π·Π° ΠΊΠΎΠ΅ΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π½Π°
the_coder.
Π ΡΠ΅Π»ΠΈΠ·Π° Π±ΡΡ Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π·Π° ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π·Π°Ρ Π²Π°ΡΠ°ΡΠΈ Π³ΡΡΠΏΠΈ (capturing groups), Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΎΠ½Π»Π°ΠΉΠ½ ΡΡΠ΅Π΄Π° Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ: http://re2c.org/playground.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
