lansare , 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 „«.
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
și .
Noua documentație este organizată sub formă de
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
