re2c 1.2

În ziua de vineri, 2 august, a fost lansată versiunea re2c — un generator liber de analizatori lexic pentru limbajele C și C++. Reamintim că re2c a fost scris în 1993 de Peter Bambulis ca un generator experimental de analizatori lexic foarte rapizi, diferit de alte generatoare prin viteza codului generat și printr-un interfata utilizator neobișnuit de flexibil, care permite integrarea ușoară și eficientă a analizatorilor în o bază de cod existentă. De atunci, proiectul a evoluat cu ajutorul comunității și continuă să rămână o platformă pentru experimente și cercetări în domeniul gramaticilor formale și automatelor finite.

Principalele noutăți în versiunea 1.2:

  • A fost adăugat un nou mod (simplificat) de verificare a sfârșitului datelor de intrare
    (în engleză „EOF rule”).
    Pentru aceasta, a fost adăugată configurația re2c:eof,
    permițând selectarea simbolului terminal,
    și regula specială $, care se activează atunci când 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" */, где file.re
    acesta este numele fișierului inclus. Re2c caută fișiere în directorul fișierului care include,
    dar și în lista căilor specificate prin opțiunea -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
    prin opțiunile -t —type-header (sau configurațiile corespunzătoare) și noile directive /*!header:re2c:on*/ și
    când re2c trebuie să genereze definițiile variabilelor, structurilor și macro-urilor,
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    folosite în alte unități de compilare.
    Re2c înțelege acum literele UTF8 și clasele de simboluri în expresiile regulate.

  • Re2c теперь понимает UTF8-литералы и классы символов в регулярных выражениях.
    Implicit, re2c parsează expresii precum "∀x ∃y" ca.
    o secvență de caractere ASCII pe 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 incomod și neașteptat pentru mulți
    utilizatori (după cum arată rapoartele constante de bug-uri). Așadar, acum
    re2c oferă opțiunea —input-encoding ,
    care permite modificarea comportamentului și parsarea "∀x ∃y" ca
    2200 78 20 2203 79.

  • Re2c permite acum utilizarea blocurilor obișnuite re2c î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
    cu ajutorul noii opțiuni —location-format . Formatul GNU se află
    sub forma filename:line:column:, iar formatul MSVC este sub forma filename(line,column).
    Această opțiune poate fi utilă pentru iubitorii de IDE.
    De asemenea, a fost adăugată 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 anumite erori de parsing și
    prioritățile operatorilor în cazuri rare.
    Istoric, opțiunea -F —flex-support permite scrierea de cod
    î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 a claselor 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
    capitole despre umplerea bufferului
    și despre modalitățile de verificare a sfârșitului datelor de intrare.
    Noua documentație este organizată sub formă de
    adevărat manual unic pe o 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
    can be enabled using the configure option —enable-debug.

This release took a long time — almost a whole year.
Most of the time, as always, was spent on developing the theoretical basis and writing
recomandările sunt aplicabile coronavirusurilor în general și COVID-19 în particular. Așadar, recomand să descărcați și să printați articolul (pentru cei interesați de acest subiect). ‘Efficient POSIX Submatch Extraction on NFA’.
The algorithms described in the article are implemented in the experimental library libre2c
(the library and benchmark build is disabled by default and can be enabled with the configure option
—enable-libs). The library is not intended as a competitor to existing
projects like RE2, but as a research platform for developing new
algorithms (which can later be used in re2c or other projects).
This is also convenient for testing, benchmarking, and creating bindings to other languages.

Thanks from the re2c developers to everyone who helped make this release possible,
and to the community in general for ideas, bug reports, patches, team spirit, etc.;]

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