Martedì 19 novembre è stata presentata la release re2c – generatore di analizzatori lessicali (ovvero il compilatore di espressioni regolari in codice nel linguaggio di programmazione di destinazione). re2c si specializza nella generazione di lessici rapidi e facilmente integrabili. Si differenzia dal più noto analogo flex per un'interfaccia flessibile, la generazione di lessici non tabellari ottimizzati e il supporto per l'estrazione di sottoparti (submatch extraction) basata su automi a stati finiti deterministici con etichette (TDFA). re2c è utilizzato in progetti in cui la velocità del lessore è fondamentale, come in Ninja e PHP.
Nella release 4.0 è stata completamente riprogettata la sottosistema di generazione del codice, permettendo l'aggiunta del supporto per otto nuovi linguaggi (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig) oltre a quelli già supportati (C/C++, Go, Rust), così come un meccanismo generale per l'aggiunta di nuovi linguaggi tramite file di configurazione. Il generatore di codice è responsabile della traduzione dell'automa a stati finiti già costruito e ottimizzato in codice, il che significa che il suo compito è selezionare le strutture di controllo, i tipi di dati e il modello di programma più adatti per il linguaggio di destinazione, ecc. In precedenza, tutta questa logica faceva parte del codice sorgente di re2c, e per modificarla o aggiungere un nuovo linguaggio era necessario fare patch al codice sorgente e ricompilare re2c. Tali patch non venivano accettate nel repository principale senza l'implementazione di un insieme standard di esempi e test, il che complicava ulteriormente l'intero processo. Ora tutta questa logica è stata spostata in file sintattici – file di configurazione testo che possono essere forniti dall'utente (per impostazione predefinita re2c utilizza quelli standard). Il codice sorgente di re2c è completamente libero da dettagli specifici del linguaggio e si basa esclusivamente sul file di sintassi. L'utente può parzialmente ridefinire il file di sintassi esistente oppure scriverne uno nuovo da zero. Per tutti i linguaggi ufficialmente supportati ci sono documentazione completa con esempi.
A proposito, l'idea stessa dei file di sintassi è emersa grazie a un commento su LOR, grazie a
the_coder.
La release ha introdotto molte altre modifiche per semplificare l'interfaccia utente, migliorare la gestione dei gruppi di cattura (capturing groups) e aggiungere un ambiente online per l'editing e la compilazione degli esempi: http://re2c.org/playground.
Fonte: linux.org.ru
