Venerdì 2 agosto è stata rilasciata la versione di re2c — un generatore libero 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, caratterizzato dalla rapidità del codice generato e da un'interfaccia utente insolitamente flessibile, che consente di integrare facilmente ed efficacemente gli analizzatori all'interno di una base di codice preesistente. Da allora, il progetto è evoluto grazie alla comunità e continua a rappresentare un luogo per esperimenti e ricerche nel campo delle grammatiche formali e degli automi finiti.
Novità principali nella versione 1.2:
Aggiunta di un nuovo modo (semplificato) per controllare la fine dei dati in ingresso
(ingl. “EOF rule”).
Per questo è stata aggiunta la configurazione re2c:eof,
che consente di scegliere il carattere terminale,
e una regola speciale $, che si attiva quando il lessico
raggiunge con successo la fine dei dati di input.
Storicamente, re2c offre diverse opzioni per il controllo della
fine dei dati di input, che variano per limitazione, efficacia e semplicità
di utilizzo. Il nuovo metodo è progettato per semplificare la scrittura del codice, mantenendo
l'efficacia e un ampio uso. I metodi precedenti
continuano a funzionare e possono essere preferibili in casi specifici.È stata aggiunta la possibilità di includere file esterni tramite la direttiva
/*!include:re2c "file.re" */, где file.re
è il nome del file incluso. Re2c cerca i file nella directory del file incluso,
nonché nell'elenco dei percorsi forniti tramite l'opzione -I.
I file inclusi possono includere altri file.
Re2c fornisce file “standard” nella directory include/
del progetto — si presume che qui vengano accumulate definizioni utili
di espressioni regolari, qualcosa nel senso di una libreria standard.
Fino ad ora, su richiesta popolare, è stato aggiunto un file con definizioni per le categorie Unicode.È stata aggiunta la possibilità di generare file di intestazione con contenuti arbitrari
con contenuto tramite l'opzione -t —type-header (o relative)
configurazioni) e nuove direttive /*!header:re2c:on*/ e
/*!header:re2c:off*/. Это может быть полезно в случаях,
re2c deve generare definizioni di variabili, strutture e macro
utilizzate in altre unità di traduzione.Re2c ora comprende i caratteri letterali UTF8 e le classi di caratteri nelle espressioni regolari.
Per impostazione predefinita, re2c analizza espressioni del tipo "∀x ∃y" come.
una sequenza di caratteri ASCII a 1 bit e2 88 80 78 20 e2 88 83 79
(codici esadecimali), e gli utenti devono eseguire il trattamento dei caratteri Unicode manualmente:
"u2200x u2203y". Questo è molto scomodo e inaspettato per molti.
utenti (come dimostrano i continui bug report). Quindi ora
re2c fornisce 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 l'uso di normali blocchi re2c in modalità -r —reuse.
Questo è utile se il file di input contiene molti blocchi, e solo una parte di essi
ha bisogno di essere riutilizzata.È ora possibile impostare il formato degli avvisi e dei messaggi di errore
utilizzando la nuova opzione —location-format <gnu | msvc>. Il formato GNU viene visualizzato
come filename:line:column:, e il formato MSVC come filename(line,column).
Questa funzione può essere utile agli appassionati di IDE.
È stata anche aggiunta l'opzione —verbose, che produce un messaggio breve di successo in caso di successo.È stata migliorata la modalità 'compatibilità' con flex — corretti alcuni bug di analisi e
la priorità degli operatori in rari casi.
Storicamente, l'opzione -F —flex-support consente di scrivere codice
mescolato 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 garantire la retrocompatibilità.L'operatore di sottrazione delle classi di caratteri / ora si applica
fino allo sviluppo della codifica, il che consente di utilizzarlo in un numero maggiore di casi,
se si utilizza una codifica con lunghezza variabile del carattere (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, quindi rinomina il file temporaneo in file di output
in un'unica operazione.La documentazione è stata ampliata e riscritta; in particolare, sono stati aggiunti nuovi
e sui metodi per il controllo della fine dei dati in ingresso..
La nuova documentazione è stata raccolta in
di un manuale esauriente a una pagina
con esempi (gli stessi sorgenti vengono visualizzati sia nella manpage che nella documentazione online).
Sono stati fatti timidi tentativi di migliorare la leggibilità del sito sui telefoni.Dal punto di vista degli sviluppatori, re2c ha acquisito un sistema secondario più completo.
debugging. Il codice di debug è ora disattivato nelle build di rilascio e
può essere incluso tramite l'opzione di configurazione —enable-debug.
Questa versione ha richiesto molto tempo — quasi un anno.
La maggior parte del tempo, come sempre, è stata dedicata allo sviluppo della base teorica e alla scrittura
articolo "Efficient POSIX Submatch Extraction on NFA".
Gli algoritmi descritti nell'articolo sono implementati nella libreria sperimentale libre2c
(la compilazione della libreria e dei benchmark è disabilitata per impostazione predefinita e può essere attivata con l'opzione di configurazione
--enable-libs). La libreria non è pensata per competere con le già esistenti
progetti come RE2, ma come una piattaforma di ricerca per lo sviluppo di nuovi
algoritmi (che possono poi essere utilizzati in re2c o in altri progetti).
È anche comodo per i test, i benchmark e la creazione di binding in altri linguaggi.
Un grazie da parte degli sviluppatori di re2c a tutti coloro che hanno contribuito a realizzare questa versione,
e in generale alla comunità per le idee, i bug report, le patch, lo spirito combattivo, ecc. ;]
Fonte: linux.org.ru
