Re2c leksik analizator generatorining chiqarilishi 2.0

bo'lib o'tdi reliz re2c 2.0, C va C++ tillari uchun bepul leksik analizator generatori. Re2c loyihasi dastlab 1993 yilda Piter Bamboulis tomonidan juda tez leksik analizatorlarning eksperimental generatori sifatida yaratilgan bo'lib, boshqa generatorlardan yaratilgan kod tezligi va g'ayrioddiy moslashuvchan foydalanuvchi interfeysi bilan ajralib turadi, bu analizatorlarni mavjud tizimga osongina va samarali tarzda kiritish imkonini beradi. kod bazasi. O'shandan beri loyiha hamjamiyat tomonidan ishlab chiqilgan va rasmiy grammatika va chekli holat mashinalari sohasida tajribalar va tadqiqotlar uchun platforma bo'lib qolmoqda.

Asosiy o'zgarishlar:

  • Go tili uchun qo'shimcha yordam (re2c uchun "--lang go" opsiyasi yoki alohida re2go dasturi sifatida yoqiladi). C va Go uchun hujjatlar bir xil matndan yaratilgan, lekin turli kod misollari bilan. Re2c-da kod ishlab chiqarish quyi tizimi butunlay qayta ishlab chiqilgan, bu kelajakda yangi tillarni qo'llab-quvvatlashni osonlashtirishi kerak.
  • CMake uchun muqobil qurish tizimi qo'shildi (rahmat ligfx!). Re2c-ni CMake-ga tarjima qilishga urinishlar uzoq vaqtdan beri qilingan, ammo ligfx-ga qadar hech kim to'liq huquqli echimni taklif qilmagan. Eski Autotools qurish tizimi qo'llab-quvvatlanishda va foydalanishda davom etmoqda va yaqin kelajakda undan voz kechish rejalari yo'q (qisman tarqatish ishlab chiquvchilari uchun muammolarni yuzaga keltirmaslik uchun, qisman eski qurish tizimi yangisiga qaraganda ancha barqaror va ixcham bo'lgani uchun). ). Ikkala tizim ham Travis CI yordamida doimiy ravishda sinovdan o'tkaziladi.
  • Umumiy API dan foydalanganda konfiguratsiyalarda interfeys kodini belgilash imkoniyati qo'shildi. Ilgari, ko'pchilik API funksiyalar yoki funksiya makroslari shaklida ko'rsatilishi kerak edi. Endi ular "@@{name}" yoki oddiygina "@@" shaklidagi shablon parametrlari bilan ixtiyoriy satrlar shaklida ko'rsatilishi mumkin (agar faqat bitta parametr mavjud bo'lsa va noaniqlik bo'lmasa). API uslubi re2c:api:style konfiguratsiyasi tomonidan o'rnatiladi (funktsiyalar qiymati funktsional uslubni, erkin shakl esa ixtiyoriy uslubni belgilaydi).
  • “-c”, “-start-conditions” opsiyalarining ishlashi takomillashtirildi, bu sizga bir nechta o'zaro bog'langan lekserlarni bitta re2c blokida birlashtirish imkonini beradi. Endi siz shartli bloklar bilan bir qatorda oddiy bloklardan ham foydalanishingiz va bitta faylda bir nechta bog'liq bo'lmagan shartli bloklarni belgilashingiz mumkin. "-c", "--start-conditions" va "-f", "--" bilan birgalikda "-r", "--reuse" (boshqa bloklardagi kodni qayta ishlatish) opsiyalarining yaxshilangan ishlashi. storable-state" opsiyalari (har qanday nuqtada uzilishi va keyinroq bajarilishini davom ettirishi mumkin bo'lgan holatli lekser).
  • Yaqinda qo‘shilgan kirish oxiri (EOF qoidasi) algoritmidagi xatolik tuzatildi, bu kamdan-kam hollarda bir-biriga o‘xshash qoidalarni noto‘g‘ri qayta ishlashga olib keldi.
  • Bootstrap jarayoni soddalashtirildi. Ilgari, qurish tizimi o'zini qayta qurish uchun ishlatilishi mumkin bo'lgan allaqachon qurilgan re2c ni dinamik ravishda topishga harakat qildi. Bu noto'g'ri bog'liqliklarga olib keldi (chunki qaramlik grafigi dinamik edi, bu ko'pchilik tuzilma tizimlariga yoqmaydi). Endi, lekserlarni qayta tiklash uchun siz qurish tizimini aniq sozlashingiz va RE2C_FOR_BUILD o'zgaruvchisini o'rnatishingiz kerak.

Manba: opennet.ru

a Izoh qo'shish