re2c 2.0

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.

  • A fost adăugată o alternativă de sistem de construire folosind CMake (mulțumiri lui ligfx!).


    Î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

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster