เบ›เปˆเบญเบเบญเบญเบเบกเบฒเป€เบกเบทเปˆเบญเบงเบฑเบ™เบญเบฑเบ‡เบ„เบฒเบ™เบ—เบต 19 เบžเบฐเบˆเบดเบ re2c - เบœเบนเป‰เบœเบฐเบฅเบดเบ”เป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐ lexical (เบเบฑเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ›เบปเบเบเบฐเบ•เบดเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ). re2c เบŠเปˆเบฝเบงเบŠเบฒเบ™เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ lexers เปƒเบ™เปเบ–เบงเป„เบงเปเบฅเบฐเบ‡เปˆเบฒเบเบ”เบฒเบ. เบกเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบ flex analogue เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡เบซเบผเบฒเบเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบ‚เบญเบ‡เบกเบฑเบ™, เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ lexers เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปเบฅเบฐเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบชเบฐเบเบฑเบ”เป€เบญเบปเบฒ submatch เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ‚เบญเบ‡เบฅเบฑเบ” finite เบเปเบฒเบ™เบปเบ”เบ—เบตเปˆเบกเบต tags (TDFA). re2c เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเป„เบงเบ‚เบญเบ‡ lexer เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เปƒเบ™ Ninja เปเบฅเบฐ PHP.

เปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบ 4.0, เบฅเบฐเบšเบปเบšเบเปˆเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เปเบ‚เบ‡เปเบฎเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบชเปเบฒเบฅเบฑเบšเปเบ›เบ”เบžเบฒเบชเบฒเปƒเบซเบกเปˆ (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig) เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปเบฅเป‰เบง (C. /C++, Go, Rust), เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบปเบ™เป„เบเบ—เบปเปˆเบงเป„เบ›เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบžเบฒเบชเบฒเปƒเบซเบกเปˆเป‚เบ”เบเบœเปˆเบฒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ. เป€เบ„เบทเปˆเบญเบ‡เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเปƒเบ™เบเบฒเบ™เปเบ›เป€เบ„เบทเปˆเบญเบ‡เบฅเบฑเบ”เบ—เบตเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เปเบฅเป‰เบงเปเบฅเบฐเบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เปƒเบซเป‰เบ”เบตเบ—เบตเปˆเบชเบธเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เป€เบฅเบทเบญเบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ„เบงเบšเบ„เบธเบก, เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™, เบฎเบนเบšเปเบšเบšเป‚เบ„เบ‡เบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›, เปเบฅเบฐเบญเบทเปˆเบ™เป†เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบžเบฒเบชเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ. เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เป€เบซเบ”เบœเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ re2c, เปเบฅเบฐเป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบกเบฑเบ™เบซเบผเบทเป€เบžเบตเปˆเบกเบžเบฒเบชเบฒเปƒเบซเบกเปˆ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เปเบเป‰เป„เบ‚เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบฅเบฐเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆ re2c. patches เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบเบญเบกเบฎเบฑเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ repository เบ•เบปเป‰เบ™เบ•เปเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบŠเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบฅเบฐเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฑเบšเบชเบปเบ™เบ•เบทเปˆเบกเบญเบตเบ. เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ เป„เบŸเบฅเปŒ syntax โ€“ เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบชเบฐเปœเบญเบ‡เปƒเบซเป‰เป„เบ”เป‰ (re2c เปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ•เบฒเบกเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™). เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ re2c เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบžเบฒเบชเบฒ เปเบฅเบฐเบญเบฒเป„เบชเบžเบฝเบ‡เปเบ•เปˆเป„เบŸเบฅเปŒ syntax เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ” override เบšเบฒเบ‡เบชเปˆเบงเบ™เป„เบŸเบฅเปŒ syntax เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบซเบผเบทเบ‚เบฝเบ™เปƒเบซเบกเปˆเบˆเบฒเบเบ•เบปเป‰เบ™. เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเบžเบฒเบชเบฒเบ—เบตเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เบกเบต เป€เบญเบเบฐเบชเบฒเบ™เบ„เบปเบšเบ–เป‰เบงเบ™เบžเป‰เบญเบกเบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™, เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบซเบผเบฒเบเบ‚เบญเบ‡เป„เบŸเบฅเปŒ syntax เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเป‰เบญเบ™เบเบฒเบ™ เบซเบ™เบถเปˆเบ‡เบ„เปเบฒเป€เบซเบฑเบ™เบเปˆเบฝเบงเบเบฑเบš ENT, เบ‚เปเบ‚เบญเบšเปƒเบˆเบ—เปˆเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบฑเป‰เบ™ re2c 4.0the_coder.

เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ›เบฐเบเบญเบšเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบญเบทเปˆเบ™เป†เบซเบผเบฒเบเบขเปˆเบฒเบ‡เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบœเบนเป‰เปƒเบŠเป‰เบ‡เปˆเบฒเบ, เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบธเปˆเบกเบเบฒเบ™เบˆเบฑเบšเบžเบฒเบš, เปเบฅเบฐเบเบฑเบ‡เป„เบ”เป‰เป€เบžเบตเปˆเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบญเบญเบ™เป„เบฅเบ™เปŒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ”เบฑเบ”เปเบเป‰เปเบฅเบฐเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ•เบปเบงเบขเปˆเบฒเบ‡: http://re2c.org/playground.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: linux.org.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™