Llançament del generador de lexer re2c 1.2

tingué lloc alliberament re2c, un generador d'analitzador lèxic gratuït per a llenguatges C i C++. Recordem que re2c va ser escrit l'any 1993 per Peter Bambulis com un generador experimental d'analitzadors lèxics molt ràpids, que es diferencien d'altres generadors per la velocitat del codi generat i una interfície d'usuari inusualment flexible que permet integrar els analitzadors de manera fàcil i eficient en un codi existent. base. Des de llavors, el projecte ha estat desenvolupat per la comunitat i continua sent una plataforma per a experiments i investigacions en el camp de les gramàtiques formals i les màquines d'estats finits.

La preparació per al llançament va durar gairebé un any sencer. La major part del temps, com sempre, es dedicava a desenvolupar un marc teòric i escriure
articles"Extracció eficient de subpartides POSIX a NFA".
Els algorismes descrits a l'article estan implementats a la biblioteca experimental libre2c
(la creació de la biblioteca i les proves de rendiment està desactivada per defecte i s'habilita amb l'opció de configuració "—enable-libs"). La biblioteca no pretén com a competidora de projectes existents com RE2, sinó com una plataforma de recerca per al desenvolupament de nous.
algorismes (que després es poden utilitzar en re2c o en altres projectes). També és convenient des del punt de vista de provar, mesurar el rendiment i crear enllaços a altres idiomes.

Principals innovacions a la versió re2c 1.2:

  • S'ha afegit un nou mètode simplificat per comprovar el final de les dades d'entrada ("regla EOF"). Per a això, s'ha afegit la configuració "re2c:eof",
    us permet seleccionar el caràcter terminal,
    i una regla especial "$", que s'activa si el lexer
    ha arribat correctament al final de les dades d'entrada.
    Històricament, re2c ofereix una selecció de diversos mètodes de verificació
    final de les entrades que varien en limitació, eficiència i simplicitat
    aplicacions. El nou mètode està dissenyat per simplificar l'escriptura de codi, mentre
    mentre segueix sent eficaç i àmpliament aplicable. Velles maneres
    encara funciona i pot ser preferit en alguns casos.

  • S'ha afegit la possibilitat d'incloure fitxers externs mitjançant una directiva
    "/*!include:re2c "fitxer.re" */", on "fitxer.re" és el nom del fitxer que s'ha d'incloure. Re2c cerca fitxers al directori de fitxers inclosos,
    així com a la llista de camins especificats mitjançant l'opció “-I”.
    Els fitxers inclosos poden incloure altres fitxers.
    Re2c proporciona fitxers "estàndard" al directori "inclou/".
    projecte: s'espera que s'acumulin definicions útils
    expressions regulars, com la biblioteca estàndard.
    Fins ara, a petició dels treballadors, s'ha afegit un fitxer amb definicions de categories Unicode.

  • S'ha afegit la possibilitat de generar fitxers de capçalera amb arbitrari
    contingut utilitzant les opcions "-t --type-header" (o adequades
    configuracions) i noves directives "/*!header:re2c:on*/" i
    "/*!header:re2c:off*/". Això pot ser útil en els casos en què
    quan re2c necessita generar definicions de variables, estructures i macros,
    utilitzat en altres unitats de traducció.

  • Re2c ara entén els literals UTF8 i les classes de caràcters en expressions regulars.
    Per defecte, re2c analitza expressions com "∀x ∃y" com
    seqüència de caràcters ASCII d'1 bit "e2 88 80 78 20 e2 88 83 79"
    (codis hexadecimals) i els usuaris han d'escapar els caràcters Unicode manualment:
    "\\u2200x \\u2203y." Això és molt incòmode i inesperat per a molts
    usuaris (com ho demostren els informes d'errors constants). Així que ara
    re2c proporciona l'opció "--codificació d'entrada {ascii | utf8}",
    que us permet canviar el comportament i analitzar “∀x ∃y” com
    "2200 78 20 2203 79".

  • Re2c ara permet utilitzar blocs re2c normals en mode "-r --reuse".
    Això és convenient si el fitxer d'entrada conté molts blocs i només alguns d'ells
    cal reutilitzar.

  • Ara podeu configurar el format dels avisos i missatges d'error
    utilitzant la nova opció "--location-format {gnu | msvc}". Es mostra el format GNU
    com a "nomfitxer:línia:columna:", i el format MSVC com a "nomfitxer(línia,columna)".
    Aquesta característica pot ser útil per als amants de l'IDE.
    També s'ha afegit una opció "--verbose", que mostra un breu missatge de victòria si té èxit.

  • S'ha millorat el mode de "compatibilitat" amb flex: s'han corregit alguns errors d'anàlisi i
    precedència incorrecta de l'operador en casos excepcionals.
    Històricament, l'opció "-F --flex-support" us permetia escriure codi
    barrejat en estil flex i estil re2c, cosa que dificulta una mica l'anàlisi.
    El mode de compatibilitat Flex rarament s'utilitza en el codi nou,
    però re2c continua donant suport per a la compatibilitat enrere.

  • Ara s'aplica l'operador de resta de classe de caràcters "/".
    abans d'ampliar la codificació, la qual cosa permet utilitzar-la en un nombre més gran de casos,
    si s'utilitza una codificació de longitud de caràcter variable (per exemple, UTF8).

  • El fitxer de sortida ara es crea atòmicament: re2c crea primer un fitxer temporal
    i hi escriu el resultat, i després canvia el nom del fitxer temporal a la sortida
    una operació.

  • La documentació es va completar i reescriure; en particular, se'n van afegir de nous
    capítols sobre http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и sobre les maneres de comprovar el final de les dades d'entrada.
    La nova documentació es recull en el formulari
    una guia completa d'una pàgina
    amb exemples (les mateixes fonts es representen a la pàgina de manual i a la documentació en línia).
    S'han fet mals intents per millorar la llegibilitat del lloc als telèfons.

  • Des del punt de vista dels desenvolupadors, re2c ha adquirit un subsistema més complet
    depuració El codi de depuració ara està desactivat a les versions de versions i
    es pot activar mitjançant l'opció de configuració "--enable-debug".

Font: opennet.ru

Afegeix comentari