Re2c leksik analizator generatorining chiqarilishi 1.2

bo'lib o'tdi reliz re2c, C va C++ tillari uchun bepul leksik analizator generatori. Eslatib o'tamiz, re2c 1993 yilda Piter Bambulis tomonidan juda tez leksik analizatorlarning eksperimental generatori sifatida yozilgan bo'lib, yaratilgan kod tezligi va analizatorlarni mavjud kodga oson va samarali integratsiya qilish imkonini beruvchi noodatiy moslashuvchan foydalanuvchi interfeysi bilan boshqa generatorlardan farq qiladi. asos. O'shandan beri loyiha hamjamiyat tomonidan ishlab chiqilgan va rasmiy grammatika va chekli holat mashinalari sohasida tajribalar va tadqiqotlar uchun platforma bo'lib qolmoqda.

Chiqarishga tayyorgarlik deyarli bir yil davom etdi. Ko'p vaqt, har doimgidek, nazariy asosni ishlab chiqish va yozishga sarflangan
maqolalar"NFA-da samarali POSIX submatch ekstraktsiyasi".
Maqolada tasvirlangan algoritmlar libre2c eksperimental kutubxonasida amalga oshiriladi
(kutubxonani qurish va unumdorlik testlari sukut bo'yicha o'chirib qo'yilgan va "β€”enable-libs" konfiguratsiya opsiyasi orqali yoqilgan). Kutubxona RE2 kabi mavjud loyihalarga raqobatchi sifatida emas, balki yangilarini ishlab chiqish uchun tadqiqot platformasi sifatida mo'ljallangan.
algoritmlar (keyin re2c yoki boshqa loyihalarda foydalanish mumkin). Sinov, ishlashni o'lchash va boshqa tillarga bog'lanishlarni yaratish nuqtai nazaridan ham qulay.

re2c 1.2 versiyasidagi asosiy yangiliklar:

  • Kirish ma'lumotlarining oxirini tekshirishning yangi soddalashtirilgan usuli qo'shildi ("EOF qoidasi"). Buning uchun "re2c: eof" konfiguratsiyasi qo'shildi,
    terminal belgisini tanlash imkonini beradi,
    va maxsus qoida "$", qaysi lexer bo'lsa tetiklenir
    kirish ma'lumotlarining oxiriga muvaffaqiyatli yetdi.
    Tarixiy jihatdan re2c bir nechta tekshirish usullarini tanlash imkonini beradi
    cheklash, samaradorlik va soddaligi bilan farq qiluvchi kirishlarning oxiri
    ilovalar. Yangi usul kod yozishni soddalashtirish uchun mo'ljallangan, esa
    samarali va keng qo'llanilishi mumkin bo'lgan holda. Eski usullar
    hali ham ishlaydi va ba'zi hollarda afzal bo'lishi mumkin.

  • Direktiv yordamida tashqi fayllarni kiritish imkoniyati qo'shildi
    "/*!include:re2c "file.re" */", bu erda "file.re" - kiritiladigan fayl nomi. Re2c fayl katalogidagi fayllarni qidiradi,
    shuningdek, "-I" opsiyasi yordamida ko'rsatilgan yo'llar ro'yxatida.
    Kiritilgan fayllar boshqa fayllarni o'z ichiga olishi mumkin.
    Re2c "include/" katalogidagi "standart" fayllarni taqdim etadi
    loyiha - u erda foydali ta'riflar to'planishi kutilmoqda
    muntazam iboralar, standart kutubxona kabi narsa.
    Hozircha, ishchilarning iltimosiga binoan, Unicode toifalari ta'riflari bilan bitta fayl qo'shildi.

  • Sarlavha fayllarini o'zboshimchalik bilan yaratish imkoniyati qo'shildi
    "-t --type-header" opsiyalaridan foydalangan holda kontent (yoki tegishli
    konfiguratsiyalar) va yangi direktivalar "/*!header:re2c:on*/" va
    "/*!sarlavha:re2c:off*/". Bu holatlarda foydali bo'lishi mumkin
    re2c o'zgaruvchilar, tuzilmalar va makroslarning ta'riflarini yaratishi kerak bo'lganda,
    boshqa tarjima birliklarida ishlatiladi.

  • Re2c endi UTF8 harflarini va oddiy iboralardagi belgilar sinflarini tushunadi.
    Odatiy bo'lib, re2c "βˆ€x βˆƒy" kabi ifodalarni ajratadi
    β€œe1 2 88 80 78 e20 2 88 83” 79 bitli ASCII belgilar ketma-ketligi
    (hex kodlari) va foydalanuvchilar Unicode belgilaridan qo'lda qochishlari kerak:
    β€œ\\u2200x \\u2203y.” Bu ko'pchilik uchun juda noqulay va kutilmagan
    foydalanuvchilar (doimiy xato hisobotlari dalolat beradi). Xo'sh, hozir
    re2c "--input-encoding {ascii | utf8}",
    bu sizga xatti-harakatni o'zgartirish va "βˆ€x βˆƒy" ni tahlil qilish imkonini beradi
    β€œ2200 78 20 2203 79.”

  • Re2c endi oddiy re2c bloklarini "-r --reuse" rejimida ishlatishga imkon beradi.
    Agar kirish faylida ko'plab bloklar bo'lsa va ulardan faqat ba'zilari bo'lsa, bu qulay
    qayta foydalanish kerak.

  • Endi siz ogohlantirishlar va xato xabarlari formatini o'rnatishingiz mumkin
    yangi "--location-format {gnu |" opsiyasi yordamida msvc}". GNU formati ko'rsatiladi
    "fayl nomi: qator: ustun:" va MSVC formati "fayl nomi (satr, ustun)" sifatida.
    Bu xususiyat IDE ixlosmandlari uchun foydali bo'lishi mumkin.
    "--verbose" varianti ham qo'shildi, agar muvaffaqiyatli bo'lsa, qisqa g'alaba xabarini ko'rsatadi.

  • Flex bilan "moslik" rejimi yaxshilandi - ba'zi tahlil xatolar tuzatildi va
    kamdan-kam hollarda noto'g'ri operator ustunligi.
    Tarixiy jihatdan, "-F --flex-suppor" opsiyasi sizga kod yozish imkonini berdi
    flex uslubi va re2c uslubida aralashtiriladi, bu esa tahlil qilishni biroz qiyinlashtiradi.
    Flex moslik rejimi yangi kodda kamdan-kam qo'llaniladi,
    lekin re2c uni orqaga qarab muvofiqligi uchun qo'llab-quvvatlashda davom etmoqda.

  • Endi "/" belgilar sinfini ayirish operatori amal qiladi
    ko'proq hollarda foydalanishga imkon beruvchi kodlashni kengaytirishdan oldin,
    agar o'zgaruvchan belgilar uzunligi kodlash ishlatilsa (masalan, UTF8).

  • Chiqish fayli endi atomik tarzda yaratiladi: re2c avval vaqtinchalik faylni yaratadi
    va natijani unga yozadi va keyin vaqtinchalik faylni chiqish nomiga o'zgartiradi
    bitta operatsiya.

  • Hujjatlar to'ldirildi va qayta yozildi; xususan, yangilari qo'shildi
    haqida boblar http://re2c.org/manual/manual.html#buffer-refilling Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π°
    ΠΈ kiritilgan ma'lumotlarning tugashini tekshirish usullari haqida.
    Yangi hujjatlar shaklda yig'iladi
    bir sahifali to'liq qo'llanma
    misollar bilan (xuddi shu manbalar manpageda va onlayn hujjatlarda ko'rsatilgan).
    Telefonlarda saytni o'qish qobiliyatini yaxshilash uchun yomon urinishlar qilingan.

  • Ishlab chiquvchilar nuqtai nazaridan, re2c to'liqroq quyi tizimga ega bo'ldi
    disk raskadrovka Nosozliklarni tuzatish kodi endi versiya tuzilmalarida va
    "--enable-debug" konfiguratsiya opsiyasi yordamida yoqish mumkin.

Manba: opennet.ru

a Izoh qo'shish