Lansarea generatorului de analizor lexical re2c 1.2

a avut loc eliberare re2c, un generator de analizor lexical gratuit pentru limbajele C și C++. Amintiți-vă că re2c a fost scris în 1993 de Peter Bambulis ca un generator experimental de analizoare lexicale foarte rapide, care se deosebesc de alți generatori prin viteza codului generat și o interfață cu utilizatorul neobișnuit de flexibilă, care permite analizoarelor să fie ușor și eficient integrate într-un cod existent. baza. 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.

Pregătirea pentru lansare a durat 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 testelor de performanță este dezactivată implicit și este activată de opțiunea de configurare „—enable-libs”). Biblioteca nu este concepută ca un concurent al proiectelor existente precum RE2, ci ca o platformă de cercetare pentru dezvoltarea altora noi.
algoritmi (care pot fi apoi utilizați în re2c sau în alte proiecte). De asemenea, este convenabil din punctul de vedere al testării, măsurării performanței și creării de legături cu alte limbi.

Principalele inovații în versiunea re2c 1.2:

  • S-a adăugat o nouă metodă simplificată de verificare a sfârșitului datelor de intrare („regula EOF”). Pentru aceasta, a fost adăugată configurația „re2c:eof”,
    vă permite să selectați caracterul terminal,
    și o regulă specială „$”, care este declanșată dacă 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” este numele fișierului care urmează să fie inclus. 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ă opțiunea „--input-encoding {ascii | utf8}",
    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 {gnu | msvc}". Este afișat formatul GNU
    ca „nume fișier:linie:coloană:”, iar formatul MSVC ca „nume fișier(linie,coloană)”.
    Această caracteristică poate fi utilă pentru iubitorii de IDE.
    A fost adăugată și o opțiune „--verbose”, care afișează un scurt mesaj de victorie dacă are succes.

  • Modul „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” vă permitea să scrieți 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 „/” se aplică acum
    î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 http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и despre modalitățile de a verifica sfârșitul datelor de intrare.
    Noua documentație se colectează în formular
    un ghid 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”.

Sursa: opennet.ru

Adauga un comentariu