il rilascio , generatore di analizzatori lessicali per i linguaggi C e C++. Ricordiamo che re2c è stato scritto nel 1993 da Peter Bambulis come generatore sperimentale di analizzatori lessicali molto veloci, distinto dagli altri generatori per la velocità del codice generato e un'interfaccia utente insolitamente flessibile, che consente di integrare facilmente ed efficacemente gli analizzatori in una base di codice esistente. Da allora, il progetto è stato sviluppato dalla comunità e continua a rimanere un terreno di sperimentazione e ricerca nell'ambito delle grammatiche formali e degli automi finiti.
La preparazione del rilascio ha richiesto quasi un anno. Come sempre, la maggior parte del tempo è stata dedicata allo sviluppo della base teorica e alla scrittura
dell'articolo ««.
Gli algoritmi descritti nell'articolo sono stati implementati in una libreria sperimentale chiamata libre2c
(la compilazione della libreria e dei test delle prestazioni è disattivata per impostazione predefinita e viene attivata con l'opzione di configure «—enable-libs»). La libreria è concepita non come concorrente di progetti già esistenti, come RE2, ma come piattaforma di ricerca per lo sviluppo di nuovi
algoritmi (che possono poi essere utilizzati in re2c o in altri progetti). Questo è anche conveniente per il testing, la misurazione delle prestazioni e la creazione di binding per altri linguaggi.
Le principali novità nella versione re2c 1.2:
- È stato aggiunto un nuovo modo semplificato di controllare la fine dei dati di input («EOF rule»). Per questo è stata aggiunta la configurazione «re2c:eof»,
che consente di scegliere il simbolo terminale,
e una regola speciale «$», che scatta se il lessico
ha raggiunto con successo la fine dei dati di ingresso.
Storicamente, re2c offre diverse modalità per verificare la
fine dei dati di ingresso, variando per limitazioni, efficacia e semplicità
d'uso. Il nuovo metodo è stato progettato per semplificare la scrittura del codice, rimanendo
efficace e ampiamente applicabile. I metodi precedenti
funzionano ancora e possono essere preferibili in alcuni casi. - Aggiunta la possibilità di includere file esterni tramite la direttiva
«!include:re2c «file.re» *», dove «file.re» è il nome del file incluso. Re2c cerca i file nella directory del file incluso,
e anche nell'elenco dei percorsi specificati tramite l'opzione «-I».
I file inclusi possono includere altri file.
Re2c fornisce file «standard» nella directory «include/»
del progetto — si presume che lì verranno accumulati utili definiti
di espressioni regolari, qualcosa nello spirito della libreria standard.
Finora, su richiesta degli utenti, è stato aggiunto un file con definizioni delle categorie Unicode. - Aggiunta la possibilità di generare file di intestazione con contenuti arbitrari
utilizzando le opzioni «-t —type-header» (o le relative
configurazioni) e le nuove direttive «!header:re2c:on*» e
«!header:re2c:off*». Questo può essere utile nei casi in cui,
quando re2c deve generare definizioni di variabili, strutture e macro,
utilizzate in altre unità di traduzione. - Re2c ora comprende lettere UTF8 e classi di simboli nelle espressioni regolari.
Per impostazione predefinita, re2c analizza espressioni del tipo «∀x ∃y» come
una sequenza di simboli ASCII a 1 bit «e2 88 80 78 20 e2 88 83 79»
(codici esadecimali), e gli utenti devono eseguire manualmente l'escaping dei caratteri Unicode:
«\u2200x \u2203y». Questo è molto scomodo e inaspettato per molti
utenti (come dimostrano i report di bug costanti). Per questo motivo, ora
re2c offre l'opzione «—input-encoding {ascii | utf8}»,
che consente di modificare il comportamento e analizzare «∀x ∃y» come
«2200 78 20 2203 79». - Re2c ora consente di utilizzare normali blocchi re2c in modalità «-r —reuse».
Questo è utile se il file di input contiene molti blocchi e solo alcuni di essi
necessitano di essere riutilizzati. - È stata introdotta la possibilità di impostare il formato dei messaggi di avviso e di errore
con la nuova opzione «—location-format {gnu | msvc}». Il formato GNU è visualizzato
come «filename:line:column:», mentre il formato MSVC è come «filename(line,column)».
Questa funzionalità può essere utile agli appassionati di IDE.
È stata inoltre aggiunta l'opzione «—verbose», che visualizza un breve messaggio di successo in caso di riuscita. - È stata migliorata la modalità «compatibilità» con flex — corretti alcuni errori di parsing e
priorità degli operatori in rari casi.
Storicamente, l'opzione «-F —flex-suppor» consente di scrivere codice
misto nello stile flex e nello stile re2c, il che rende un po' più difficile l'analisi sintattica.
La modalità di compatibilità con flex è raramente utilizzata nel nuovo codice,
ma re2c continua a supportarla per la retrocompatibilità. - L'operatore di sottrazione dei classi di caratteri «/» è ora applicato
prima dell'espansione della codifica, il che consente di utilizzarlo in un numero maggiore di casi,
se viene utilizzata una codifica a lunghezza variabile dei caratteri (ad esempio UTF8). - Il file di output viene ora creato in modo atomico: re2c crea prima un file temporaneo
e scrive il risultato in esso, per poi rinominare il file temporaneo nel file di output
in un'unica operazione. - La documentazione è stata completata e riscritta; in particolare, sono stati aggiunti nuovi
capitoli su
e .
La nuova documentazione è stata raccolta in un
con esempi (gli stessi sorgenti vengono visualizzati nella manpage e nella documentazione online).
Sono stati compiuti timidi tentativi di migliorare la leggibilità del sito sui telefoni. - Dal punto di vista degli sviluppatori, re2c ha acquisito un sistema di
debugging più completo. Il codice di debug è ora disabilitato nelle versioni di rilascio e
può essere abilitato tramite l'opzione di configurazione «—enable-debug».
Fonte: opennet.ru
