re2c 1.2

Vineri, 2 august, a fost lansată re2c, un generator gratuit de analizoare lexicale pentru limbajele C și C++. Re2c a fost scris în 1993 de Peter Bamboulis ca un generator experimental de analizoare lexicale foarte rapide, distins de alți generatori prin viteza codului generat și o interfață de utilizator neobișnuit de flexibilă, care permite analizoarelor să fie încorporate ușor și eficient într-o bază de cod existentă. De atunci, proiectul a fost dezvoltat de comunitate și continuă să fie o platformă pentru experimente și cercetări în domeniul gramaticilor formale și al mașinilor cu stări finite.

Principalele inovații în versiunea 1.2:

  • S-a adăugat o nouă modalitate (simplificată) de a verifica sfârșitul datelor de intrare
    („regula EOF în engleză”).
    Pentru aceasta, a fost adăugată configurația re2c:eof,
    vă permite să selectați caracterul terminal,
    si o regula $ speciala care se declanseaza daca lexerul
    a ajuns cu succes la sfârșitul datelor de intrare.
    Din punct de vedere istoric, re2c oferă o alegere dintre mai multe metode de verificare pentru
    sfârşitul intrărilor variind în limitare, eficienţă şi simplitate
    aplicatii. Noua metodă este concepută pentru a simplifica scrierea codului, în timp ce
    rămânând în același timp eficace și aplicabil pe scară largă. Metode vechi
    încă funcționează și poate fi preferat în unele cazuri.

  • S-a adăugat posibilitatea de a include fișiere externe folosind o directivă
    /*!include:re2c "fișier.re" */ unde fișier.re
    acesta este numele fișierului include. Re2c caută fișiere în directorul de fișiere care include,
    precum și în lista de căi specificată folosind opțiunea -I.
    Fișierele incluse pot include și alte fișiere.
    Re2c oferă fișiere „standard” în directorul include/
    proiect – este de așteptat ca acolo să se acumuleze definiții utile
    expresii regulate, ceva de genul bibliotecii standard.
    Până acum, la cererea lucrătorilor, a fost adăugat un fișier cu definiții ale categoriilor Unicode.

  • S-a adăugat capacitatea de a genera fișiere antet cu arbitrare
    conținut folosind opțiunile -t --type-header (sau corespunzătoare
    configurații) și noi directive /*!header:re2c:on*/ și
    /*!header:re2c:off*/. Acest lucru poate fi util în cazurile în care
    când re2c trebuie să genereze definiții ale variabilelor, structurilor și macrocomenzilor,
    utilizat în alte unități de traducere.

  • Re2c înțelege acum literalele UTF8 și clasele de caractere în expresiile regulate.
    Implicit, re2c analizează expresii precum „∀x ∃y” ca.
    secvență de caractere ASCII pe 1 bit e2 88 80 78 20 e2 88 83 79
    (coduri hexadecimale), iar utilizatorii trebuie să evadeze manual caracterele Unicode:
    „u2200x u2203y”. Acest lucru este foarte incomod și neașteptat pentru mulți
    utilizatorii (după cum demonstrează rapoartele constante de erori). Asa ca acum
    re2c oferă o opțiune --input-encoding ,
    care vă permite să schimbați comportamentul și să analizați „∀x ∃y” ca
    2200 78 20 2203 79.

  • Re2c permite acum utilizarea blocurilor re2c obișnuite în modul -r --reuse.
    Acest lucru este convenabil dacă fișierul de intrare conține multe blocuri și doar câteva dintre ele
    trebuie refolosit.

  • Acum puteți seta formatul avertismentelor și mesajelor de eroare
    folosind noua opțiune --location-format . Este afișat formatul GNU
    ca nume de fișier:linie:coloană: și formatul MSVC ca nume de fișier (linie,coloană).
    Această caracteristică poate fi utilă pentru iubitorii de IDE.
    A fost adăugată și o opțiune --verbose, care imprimă un scurt mesaj de victorie dacă are succes.

  • Modul de „compatibilitate” cu flex a fost îmbunătățit - unele erori de analizare au fost remediate și
    prioritate incorectă a operatorului în cazuri rare.
    Din punct de vedere istoric, opțiunea -F --flex-support îți permitea să scrii cod
    amestecat în stilul flex și stilul re2c, ceea ce face analizarea puțin dificilă.
    Modul de compatibilitate Flex este rar folosit în codul nou,
    dar re2c continuă să-l susțină pentru compatibilitate inversă.

  • Operatorul de scădere a clasei de caractere / acum se aplică
    înainte de a extinde codificarea, ceea ce îi permite să fie utilizat într-un număr mai mare de cazuri,
    dacă este utilizată o codificare cu lungime variabilă a caracterelor (de exemplu UTF8).

  • Fișierul de ieșire este acum creat atomic: re2c creează mai întâi un fișier temporar
    și scrie rezultatul în el, apoi redenumește fișierul temporar la rezultat
    o singură operație.

  • Documentația a fost completată și rescrisă; în special, au fost adăugate altele noi
    capitole despre umplerea tamponului
    и despre modalitățile de a verifica sfârșitul datelor de intrare.
    Noua documentație se colectează în formular
    un manual cuprinzător de o pagină
    cu exemple (aceleași surse sunt redate în pagina de manual și în documentația online).
    S-au făcut încercări slabe de a îmbunătăți lizibilitatea site-ului pe telefoane.

  • Din punctul de vedere al dezvoltatorilor, re2c a dobândit un subsistem mai complet
    depanare Codul de depanare este acum dezactivat în versiunile de versiuni și
    poate fi activat folosind opțiunea de configurare --enable-debug.

Această lansare a durat mult timp - aproape un an întreg.
De cele mai multe ori, ca întotdeauna, a fost petrecut pentru dezvoltarea unui cadru teoretic și scris
articole „Extragere eficientă a submeciurilor POSIX pe NFA”.
Algoritmii descriși în articol sunt implementați în biblioteca experimentală libre2c
(construirea bibliotecii și a benchmark-urilor este dezactivată implicit și este activată de opțiunea de configurare
--enable-libs). Biblioteca nu este concepută ca un concurent cu existenta
proiecte precum RE2, ci ca o platformă de cercetare pentru dezvoltarea de noi
algoritmi (care pot fi apoi utilizați în re2c sau în alte proiecte).
Este convenabil și din punctul de vedere al testării, al benchmark-urilor și al creării de legături către alte limbi.

Mulțumiri de la dezvoltatorii re2c tuturor celor care au ajutat să aibă loc această lansare,
și comunității în general pentru idei, rapoarte de erori, patch-uri, moral etc. ;]

Sursa: linux.org.ru

Adauga un comentariu