Жума күнү, 2-августта, C жана C++ тилдери үчүн лексикалык анализаторлордун бекер генератору болгон re2cтин чыгарылышы жарык көрдү. Re2c 1993-жылы Питер Бамбулис тарабынан абдан тез лексикалык анализаторлордун эксперименталдык генератору катары жазылган, башка генераторлордон түзүлгөн коддун ылдамдыгы жана адаттан тыш ийкемдүү колдонуучу интерфейси менен айырмаланып, анализаторлорду учурдагы код базасына оңой жана эффективдүү киргизүүгө мүмкүндүк берет. Ошондон бери, долбоор коомчулук тарабынан иштелип чыккан жана формалдуу грамматика жана чектүү мамлекеттик машиналар жаатында эксперименттер жана изилдөөлөр үчүн аянтча болуп калууда.

1.2 версиясындагы негизги инновациялар:

  • Киргизилген маалыматтардын бүтүшүн текшерүү үчүн жаңы (жөнөкөйлөштүрүлгөн) жол кошулду
    (Англисче “EOF эрежеси”).
    Бул үчүн, re2c:eof конфигурациясы кошулду,
    терминалдык белгини тандоого мүмкүндүк берет,
    жана атайын $ эрежеси, эгерде lexer от
    киргизилген маалыматтардын аягына ийгиликтүү жетти.
    Тарыхый жактан, re2c бир нече текшерүү ыкмаларын тандоону камсыз кылат
    чектөө, натыйжалуулук жана жөнөкөйлүгү боюнча ар кандай киргизүүлөрдүн аягы
    колдонмолор. Жаңы ыкма код жазууну жөнөкөйлөтүү үчүн иштелип чыккан, ал эми
    натыйжалуу жана кеңири колдонула турган бойдон калууда. Эски жолдор
    дагы эле иштейт жана кээ бир учурларда артыкчылык болушу мүмкүн.

  • Директиванын жардамы менен тышкы файлдарды кошуу мүмкүнчүлүгү кошулду
    /*!include:re2c "file.re" */ мында file.re
    бул камтылган файлдын аты. Re2c файл каталогунан файлдарды издейт,
    ошондой эле -I опциясын колдонуу менен көрсөтүлгөн жолдордун тизмесинде.
    Камтылган файлдар башка файлдарды камтышы мүмкүн.
    Re2c include/ каталогундагы "стандарттык" файлдарды камсыз кылат
    долбоор - ал жерде пайдалуу аныктамалар топтолот деп күтүлүүдө
    кадимки сөз айкаштары, стандарттык китепкана сыяктуу.
    Азырынча жумушчулардын өтүнүчү боюнча Юникод категорияларынын аныктамалары менен бир файл кошулду.

  • Каалоо менен баш файлдарды түзүү мүмкүнчүлүгү кошулду
    мазмун -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
    (он алтылык коддор) жана колдонуучулар Юникод символдорун кол менен качышы керек:
    "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 аркылуу иштетилиши мүмкүн.

Бул чыгаруу көп убакытты талап кылды - дээрлик бир жыл.
Көбүнчө, адаттагыдай эле, теориялык базаны иштеп чыгууга жана жазууга жумшалды
макалалар "NFA боюнча эффективдүү POSIX субматчын алуу".
Макалада сүрөттөлгөн алгоритмдер libre2c эксперименталдык китепканасында ишке ашырылат
(китепкананы жана эталондорду куруу демейки боюнча өчүрүлгөн жана конфигурациялоо опциясы менен иштетилген
--enable-libs). Китепкана азыркыга атаандаш катары эсептелбейт
RE2 сыяктуу долбоорлор, бирок жаңы иштеп чыгуу үчүн изилдөө платформасы катары
алгоритмдер (андан кийин аларды re2c же башка долбоорлордо колдонсо болот).
Ал ошондой эле тестирлөө, эталондор жана башка тилдерге байланыштарды түзүү жагынан ыңгайлуу.

Бул релиздин чыгышына жардам бергендердин баарына re2c иштеп чыгуучуларына рахмат,
жана жалпысынан коомчулукка идеялар, мүчүлүштүктөр жөнүндө отчеттор, тактар, моралдык ж.б. ;]

Source: linux.org.ru

Комментарий кошуу