kiadás , egy szabad lexikai elemző generátor C és C++ nyelvekhez. Emlékeztetőül, a re2c-t 1993-ban Peter Bambulis írta, mint egy kísérleti generátort, amely nagyon gyors lexikai elemzőket generál, és más generátoroktól eltérően a generált kód sebessége és az a rendkívül rugalmas felhasználói felület jellemzi, amely lehetővé teszi az elemzők hatékony beépítését a meglévő kód alapba. Azóta a projekt a közösség által fejlődik, és továbbra is kísérletek és kutatások helyszíne a formális grammák és véges automaták terén.
A kiadás előkészítése csaknem egy évet vett igénybe. A legtöbb idő, mint mindig, a teoretikus alap kivitelezésére és a
cikk megírására ment el, amelynek címe:«.
A cikkben leírt algoritmusok az kísérleti libre2c könyvtárban találhatók.
(a könyvtár és a teljesítménytesztek összeállítása alapértelmezés szerint ki van kapcsolva, és a «—enable-libs» configure opcióval kapcsolható be). A könyvtár nem a már létező projektek, például az RE2 versenytársaként készült, hanem kutatási platformnak, amely új
algoritmusok kifejlesztésére szolgál (amelyek később felhasználhatók a re2c-ben vagy más projektekben). Emellett kényelmes tesztelés, teljesítménymérés és más nyelvekhez való kötődések létrehozása szempontjából is.
A re2c 1.2 verzió fő újdonságai:
- Egy új, egyszerűsített megoldás került bevezetésre a bemeneti adatok végének ellenőrzésére („EOF rule”). Ehhez a „re2c:eof” konfiguráció került hozzáadásra,
mely lehetővé teszi a terminális szimbólum kiválasztását,
és egy speciális „$” szabály, amely akkor lép életbe, ha a lexer
sikeresen elérte a bemeneti adatok végét.
Történelmileg a re2c többféle módot kínál a bemeneti adatok végének
ellenőrzésére, amelyek korlátozottság, hatékonyság és egyszerűség szempontjából változnak.
Az új módszer célja, hogy egyszerűbbé tegye a kód írását, miközben
továbbra is hatékony és széleskörűen alkalmazható marad. A régi módszerek
továbbra is működnek, és bizonyos esetekben előnyben részesíthetők. - Lehetőség nyílt külső fájlok beillesztésére a direktívával,
„/*!include:re2c «file.re» */”, ahol a „file.re” a beillesztett fájl neve. A re2c a beillesztett fájl könyvtárában keresi a fájlokat,
valamint a „-I” opcióval megadott útvonalak listájában.
A beillesztett fájlok más fájlokat is beilleszthetnek.
A re2c „standard” fájlokat biztosít az „include/” könyvtárban
a projektben — feltételezhető, hogy itt hasznos reguláris kifejezések definíciói gyűlnek össze,
valami a standard könyvtár szellemében.
Eddig a munkavállalók kérésére hozzáadásra került egy fájl a Unicode kategóriák definícióival. - Lehetőség nyílt önkényes
tartalommal a „-t —type-header” opciók (vagy az annak megfelelő
konfigurációk) és az új „/*!header:re2c:on*/” és
„/*!header:re2c:off*/” direktívák segítségével. Ez hasznos lehet bizonyos esetekben,
amikor a re2c-nek változók, struktúrák és makrók definícióit kell generálnia,
melyek más fordítási egységekben használatosak. - A re2c most már értelmezi az UTF8 literálokat és a reguláris kifejezések karakterosztályait.
Alapértelmezés szerint a re2c olyan kifejezéseket elemzi, mint a „∀x ∃y”, mint
1-bites ASCII karakterek sorozatát „e2 88 80 78 20 e2 88 83 79”
(hex kódok), és a felhasználóknak manuálisan kell escape-elniük a Unicode karaktereket:
„\u2200x \u2203y”. Ez sokak számára nagyon kényelmetlen és váratlan.
(amire folyamatos hibajelentések is utalnak). Ezért most
A re2c lehetőséget biztosít a „—input-encoding {ascii | utf8}” opcióval,
ami lehetővé teszi a viselkedés megváltoztatását, és a „∀x ∃y” elemzését
úgy, hogy „2200 78 20 2203 79”. - A re2c mostantól lehetővé teszi a szokásos re2c blokkok használatát „-r —reuse” módban.
Ez kényelmes, ha a bemeneti fájl sok blokkot tartalmaz, és csak néhányra
van szükség újrahasználatra. - Lehetőség nyílt a figyelmeztetések és hibajelzések formátumának megadására
az új «—location-format {gnu | msvc}» opcióval. A GNU-formátum megjelenése
«fájlneve:sor:oszlop:», míg az MSVC-formátum így néz ki: «fájlneve(sor,oszlop)».
Ez a lehetőség hasznos lehet az IDE kedvelőinek.
Ezen kívül hozzáadódott a «—verbose» opció, amely siker esetén egy rövid győztes üzenetet jelenít meg. - Fejlesztettük a flex «kompatibilitás» módot — javítva néhány elemzési hibát és
a műveletek helytelen prioritását ritka esetekben.
Történelmileg az «-F —flex-suppor» opció lehetővé teszi a kód írását
flex stílusban és re2c stílusban, ami némileg megnehezíti a szintaxis elemzését.
A flex kompatibilitási mód ritkán használatos új kódban,
de a re2c továbbra is támogatja a visszafelé kompatibilitás érdekében. - A szimbólum osztályok kivonásának operátora «/» mostantól alkalmazva van
mielőtt a kódolás kifejtésre kerülne, ami lehetővé teszi a nagyobb alkalmazást,
ha változó hosszúságú karakterkódolás (például UTF8) használatos. - A kimeneti fájl most atomikus módon készül el: a re2c először egy ideiglenes fájlt hoz létre
és abba írja az eredményt, majd átnevezi az ideiglenes fájlt a kimeneti
folyamat egy lépésben. - A dokumentációt kiegészítették és újraírták; különösen új
fejezetekhez a
és .
Az új dokumentáció egy
példákkal (ugyanazok az források jelennek meg a manpage-ben és az online dokumentációban).
Gyenge próbálkozásokat tettek a weboldal olvashatóságának javítására mobiltelefonokon. - A fejlesztők szempontjából a re2c egy teljesebb debuggáló alrendszert kapott.
A debug kód mostanra ki van kapcsolva a kiadott verziókban.
a configure opcióval «—enable-debug» engedélyezhető.
Forrás: opennet.ru
