Rilascio del generatore di lexer re2c 1.2

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.

  • La documentazione è stata completata e riscritta; in particolare ne furono aggiunti di nuovi
    capitoli su http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и sui modi per verificare la fine dei dati di input.
    La nuova documentazione viene raccolta nel form
    una guida completa di una pagina
    con esempi (gli stessi sorgenti sono visualizzati nella manpage e nella documentazione in linea).
    Sono stati fatti scarsi tentativi per migliorare la leggibilità del sito sui telefoni.

  • 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".

Fonte: opennet.ru

Aggiungi un commento