Î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
ș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
