Luni, 20 iulie, a fost lansată versiunea re2c – generatorul de analizatori lexicale rapizi.
Modificări principale:
A fost adăugat suport pentru limbajul Go
(se activează fie cu opțiunea —lang go pentru re2c, fie ca un program separat re2go).
Documentația pentru C și Go este generată din același text, dar cu exemple de cod diferite.
Subsystema de generare de cod a fost complet refăcută în re2c, ceea ce
ar trebui să faciliteze suportul pentru noi limbaje în viitor.-
Încercările de a traduce re2c pe CMake au fost făcute de mult timp, dar până la ligfx nimeni nu a
propun un soluție completă.
Vechea sistem de construire folosind Autotools continuă să fie suportat și utilizat,
și în viitorul apropiat nu sunt planuri de abandonare a acesteia (parțial pentru a nu crea
probleme dezvoltatorilor de distribuții, parțial pentru că vechea sistem de construire
este mai stabilă și concisă decât noua).
Ambele sisteme sunt testate continuu cu ajutorul Travis CI. A fost adăugată posibilitatea de a specifica codul interfeței în configurații când se folosește
APIs generice (generic API). Anterior, majoritatea API-urilor trebuiau definite sub formă de
funcții sau macrocomenzi funcționale. Acum pot fi definite sub formă de șiruri arbitrare
cu parametrii șablon numiți de tipul @@{name} sau doar @@ (dacă
parametrul este unul și nu există ambiguitate). Stilul API este specificat prin configurația
re2c:api:style (valoarea functions stabilește stilul funcțional, iar free-form – stilul arbitrar).A fost îmbunătățită funcționarea opțiunii -c, —start-conditions, care permite combinarea mai multor
lexere interdependente într-un singur bloc re2c. Acum se pot utiliza
blocuri obișnuite alături de condiționale și defini mai multe blocuri condiționale nesusținute
în același fișier.
A fost îmbunătățită funcționarea opțiunii -r, —reuse (refolosirea codului dintr-un bloc
în alte blocuri) împreună cu opțiunile -c, —start-conditions și -f, —storable-state
(lexer cu stare salvabilă, care poate fi întrerupt în orice moment
și continuat ulterior).A fost corectată o eroare în algoritmul recent adăugat pentru procesarea sfârșitului datelor de intrare
(EOF rule), care în cazuri rare provoca o procesare greșită
a regulilor suprapuse.Procesul de bootstrap a fost simplificat. Anterior, sistemul de construire încerca să găsească dinamic un
re2c deja construit care să fie folosit pentru a se reconstrui singur.
Aceasta a dus la dependențe incorecte (deoarece graficul dependențelor devenea
dinamic, ceea ce majoritatea sistemelor de build nu apreciază).
Acum, pentru a recompila lexerii, este necesar să
configurați în mod explicit sistemul de build și să stabiliți variabila RE2C_FOR_BUILD.
Mulțumesc tuturor celor care au participat la pregătirea acestei versiuni!
Sursa: linux.org.ru
