ha avuto luogo rilasciare re2c, un generatore di analizzatori lessicali gratuito per i linguaggi C e C++. Ricordiamo che re2c è stato scritto nel 1993 da Peter Bambulis come generatore sperimentale di analizzatori lessicali molto veloci, che differisce da altri generatori per la velocità del codice generato e un'interfaccia utente insolitamente flessibile che consente agli analizzatori di essere facilmente ed efficientemente integrati in un codice esistente base. Da allora il progetto è stato sviluppato dalla comunità e continua ad essere una piattaforma per esperimenti e ricerche nel campo delle grammatiche formali e delle macchine a stati finiti.
La preparazione per il rilascio ha richiesto quasi un anno intero. La maggior parte del tempo, come sempre, è stata dedicata allo sviluppo di un quadro teorico e alla scrittura
articoli"Efficiente estrazione di submatch POSIX su NFA«.
Gli algoritmi descritti nell'articolo sono implementati nella libreria sperimentale libre2c
(la creazione della libreria e i test delle prestazioni sono disabilitati per impostazione predefinita e sono abilitati dall'opzione di configurazione "—enable-libs"). La biblioteca non è intesa come concorrente di progetti 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). È conveniente anche dal punto di vista del test, della misurazione delle prestazioni e della creazione di collegamenti ad altre lingue.
Principali novità della versione re2c 1.2:
Aggiunto un nuovo metodo semplificato per il controllo della fine dei dati di input (“regola EOF”). Per questo è stata aggiunta la configurazione “re2c:eof”,
ti permette di selezionare il carattere del terminale,
e una regola speciale “$”, che viene attivata se il lexer
raggiunto con successo la fine dei dati di input.
Storicamente, re2c offre una scelta di diversi metodi di verifica per
fine di input variabili in termini di limitazione, efficienza e semplicità
applicazioni. Il nuovo metodo è progettato per semplificare la scrittura del codice, mentre
pur rimanendo efficace e ampiamente applicabile. Vecchie vie
funzionano ancora e in alcuni casi possono essere preferiti.
Aggiunta la possibilità di includere file esterni utilizzando una direttiva
"/*!include:re2c "file.re" */", dove "file.re" è il nome del file da includere. Re2c cerca i file nella directory dei file inclusi,
così come nell'elenco dei percorsi specificati utilizzando l'opzione “-I”.
I file inclusi possono includere altri file.
Re2c fornisce file "standard" nella directory "include/".
progetto: si prevede che lì si accumuleranno definizioni utili
espressioni regolari, qualcosa come la libreria standard.
Finora, su richiesta dei lavoratori, è stato aggiunto un file con le definizioni delle categorie Unicode.
Aggiunta la possibilità di generare file di intestazione con arbitrario
contenuto utilizzando le opzioni "-t --type-header" (o file appropriati
configurazioni) e nuove direttive "/*!header:re2c:on*/" e
"/*!header:re2c:off*/". Questo può essere utile nei casi in cui
quando re2c ha bisogno di generare definizioni di variabili, strutture e macro,
utilizzato in altre unità di traduzione.
Re2c ora comprende i valori letterali UTF8 e le classi di caratteri nelle espressioni regolari.
Per impostazione predefinita, re2c analizza espressioni come "∀x ∃y" come
sequenza di caratteri ASCII da 1 bit “e2 88 80 78 20 e2 88 83 79”
(codici esadecimali) e gli utenti devono eseguire manualmente l'escape dei caratteri Unicode:
"\\u2200x \\u2203y." Questo è molto scomodo e inaspettato per molti
utenti (come evidenziato da costanti segnalazioni di bug). Così ora
re2c fornisce l'opzione "--input-encoding {ascii | utf8}",
che ti consente di modificare il comportamento e analizzare “∀x ∃y” come
“2200 78 20 2203 79.”
Re2c ora consente l'utilizzo dei normali blocchi re2c in modalità "-r --reuse".
Ciò è utile se il file di input contiene molti blocchi e solo alcuni di essi
deve essere riutilizzato.
Ora puoi impostare il formato degli avvisi e dei messaggi di errore
utilizzando la nuova opzione "--location-format {gnu | msvc}". Viene visualizzato il formato GNU
come "nomefile:riga:colonna:" e il formato MSVC come "nomefile(riga,colonna)".
Questa funzionalità può essere utile per gli amanti dell'IDE.
È stata aggiunta anche l'opzione "--verbose", che visualizza un breve messaggio di vittoria in caso di successo.
La modalità "compatibilità" con flex è stata migliorata: alcuni errori di analisi sono stati corretti e
precedenza errata dell'operatore in rari casi.
Storicamente, l'opzione "-F --flex-support" consentiva di scrivere codice
mescolato in stile flex e stile re2c, il che rende l'analisi un po' difficile.
La modalità di compatibilità Flex viene utilizzata raramente nel nuovo codice,
ma re2c continua a supportarlo per compatibilità con le versioni precedenti.
Ora si applica l'operatore di sottrazione della classe di caratteri "/".
prima di espandere la codifica, che ne consente l'utilizzo in un numero maggiore di casi,
se viene utilizzata una codifica a lunghezza di carattere variabile (ad esempio UTF8).
Il file di output viene ora creato in modo atomico: re2c crea prima un file temporaneo
e scrive il risultato al suo interno, quindi rinomina il file temporaneo nell'output
una operazione.
Dal punto di vista degli sviluppatori, re2c ha acquisito un sottosistema più completo
debug Il codice di debug è ora disabilitato nelle build di rilascio e
può essere abilitato utilizzando l'opzione di configurazione "--enable-debug".