Lansarea generatorului de analizatori lexico-re2c 1.2

A avut loc lansare re2c, un generator liber de analizatori lexici pentru limbile C și C++. Este important de amintit că re2c a fost scris în 1993 de Peter Bambulis ca un generator experimental de analizatori lexici foarte rapizi, care se distinge de celelalte generatoare prin viteza codului generat și o interfață de utilizator neobișnuit de flexibilă, care permite integrarea ușoară și eficientă a analizatorilor în baza de cod existentă. De atunci, proiectul este dezvoltat de comunitate și continuă să fie un loc pentru experimente și cercetări în domeniul gramaticilor formale și automatilor fini.

Pregătirea lansării a durat aproape un an. Cel mai mult timp, ca întotdeauna, a fost alocat dezvoltării bazei teoretice și redactării
articolului „Efficient POSIX Submatch Extraction on NFA«.
The algorithms described in the article are implemented in the experimental library libre2c
(compilarea bibliotecii și testele de performanță sunt dezactivate implicit și se activează cu opțiunea configure „—enable-libs”). Biblioteca nu este gândită ca un concurent pentru proiectele existente, precum RE2, ci ca o platformă de cercetare pentru dezvoltarea de noi
algoritmi (care ulterior pot fi utilizați în re2c sau în alte proiecte). Este, de asemenea, convenabil din punct de vedere al testării, măsurării performanței și creării de legături cu alte limbaje.

Principalele noutăți din versiunea re2c 1.2:

  • A fost adăugată o nouă metodă simplificată de verificare a sfârșitului datelor de intrare („EOF rule”). Pentru aceasta a fost adăugată configurația „re2c:eof”,
    permițând selectarea simbolului terminal,
    și o regulă specială „$”, care se activează dacă lexerul
    a atins cu succes sfârșitul datelor de intrare.
    Istoric, re2c oferă mai multe moduri de verificare a
    sfârșitului datelor de intrare, variind în funcție de limitare, eficiență și simplitatea
    aplicării. Noul mod este destinat să simplifice scrierea codului, rămânând
    eficient și foarte aplicabil. Modurile vechi
    funcționează în continuare și pot fi preferabile în anumite cazuri.
  • A fost adăugată opțiunea de a include fișiere externe prin intermediul directivei
    „ /*!include:re2c „file.re” */”, unde „file.re” este numele fișierului inclus. Re2c caută fișierele în directorul fișierului inclus,
    dar și în lista de căi specificate cu ajutorul opțiunii „-I”.
    Fișierele incluse pot include alte fișiere.
    Re2c oferă fișiere „standard” în directorul „include/”
    al proiectului — se presupune că acolo se vor acumula definiții utile
    de expresii regulate, ceva în stilul bibliotecii standard.
    Până acum, la cererea utilizatorilor, a fost adăugat un fișier cu definiții de categorii Unicode.
  • A fost adăugată posibilitatea de a genera fișiere antet cu conținut oarecare
    cu conținut prin opțiunile „-t —type-header” (sau configurațiile corespunzătoare) și noile directive „/*!header:re2c:on*/” și
    „/*!header:re2c:off*/”. Acest lucru poate fi util în cazurile în care,
    Re2c acum înțelege literalurile UTF8 și clasele de caractere în expresiile regulate.
    folosite în alte unități de compilare.
    Re2c înțelege acum literele UTF8 și clasele de simboluri în expresiile regulate.
  • Re2c acum înțelege literalurile UTF8 și clasele de caractere în expresiile regulate.
    În mod implicit, re2c analizează expresii precum „∀x ∃y” ca
    o secvență de caractere ASCII de 1 bit „e2 88 80 78 20 e2 88 83 79”
    (coduri hex), iar utilizatorii sunt nevoiți să scape caracterele Unicode manual:
    „\\u2200x \\u2203y”. Acest lucru este foarte inconvenient și neașteptat pentru mulți
    utilizatori (după cum arată rapoartele constante de bug-uri). Așadar, acum
    re2c oferă opțiunea „—input-encoding {ascii | utf8}”,
    care permite schimbarea comportamentului și analizarea „∀x ∃y” ca
    „2200 78 20 2203 79”.
  • Re2c acum permite utilizarea blocurilor re2c obișnuite în modul „-r —reuse”.
    Aceasta este convenabilă, dacă fișierul de intrare conține multe blocuri și doar o parte din ele
    necesită reutilizare.
  • A apărut posibilitatea de a specifica formatul avertismentelor și mesajelor de eroare
    prin noua opțiune „—location-format {gnu | msvc}”. Formatul GNU este afișat
    ca „filename:line:column:”, iar formatul MSVC - ca „filename(line,column)”.
    Această opțiune poate fi utilă pentru iubitorii de IDE.
    De asemenea, a fost adaugată opțiunea „—verbose”, care afișează un mesaj scurt de succes în caz de reușită.
  • Modul de „compatibilitate” cu flex a fost îmbunătățit - au fost corectate unele erori de analiză și
    prioritățile operatorilor în cazuri rare.
    Istoric, opțiunea „-F —flex-suppor” permite scrierea codului
    împreună în stil flex și re2c, ceea ce complică puțin parsing-ul.
    Modul de compatibilitate cu flex este rar folosit în noul cod,
    dar re2c continuă să-l susțină pentru a asigura compatibilitatea inversă.
  • Operatorul de scădere pentru clasele de caractere „/” este acum aplicat
    înainte de extinderea codificării, ceea ce îl face utilizabil în mai multe cazuri,
    dacă se folosește o codificare cu lungime variabilă a caracterelor (de exemplu UTF8).
  • Fișierul de ieșire este acum creat atomic: re2c mai întâi creează un fișier temporar
    și scrie în el rezultatul, apoi redenumește fișierul temporar în ieșirea
    într-o singură operațiune.
  • Documentația a fost completată și rescrisă; în special, au fost adăugate noi
    capitolelor despre http://re2c.org/manual/manual.html#buffer-refilling umplerea buffer-ului
    și despre modalitățile de verificare a sfârșitului datelor de intrare.
    Noua documentație este organizată sub formă de
    ghidul complet pe o singură pagină
    cu exemple (același sursă este redat în manpage și în documentația online).
    Au fost făcute tentative slabe de a îmbunătăți lizibilitatea site-ului pe telefoane.
  • Din perspectiva dezvoltatorilor, re2c a dobândit un subsistem mai complet.
    debugging. The debug code is now disabled in release builds and
    poate fi activat prin opțiunea de configurare „—enable-debug”.

Sursa: opennet.ro

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