re2c 1.2

Fredagen den 2 augusti släpptes re2c, en gratis generator av lexikalanalysatorer för C- och C++-språken. Re2c skrevs 1993 av Peter Bamboulis som en experimentell generator av mycket snabba lexikalanalysatorer, särskiljda från andra generatorer genom hastigheten på den genererade koden och ett ovanligt flexibelt användargränssnitt som gör att analysatorer enkelt och effektivt kan bäddas in i en befintlig kodbas. Sedan dess har projektet utvecklats av samhället och fortsätter att vara en plattform för experiment och forskning inom området formell grammatik och finita tillståndsmaskiner.

Huvudsakliga innovationer i version 1.2:

  • Lade till ett nytt (förenklat) sätt att leta efter slutet på indata
    (Engelska "EOF-regeln").
    För detta har re2c:eof-konfigurationen lagts till,
    låter dig välja terminaltecken,
    och en speciell $-regel som avfyras om lexern
    lyckades nå slutet av inmatningsdata.
    Historiskt ger re2c ett urval av flera verifieringsmetoder för
    slutet av input varierar i begränsning, effektivitet och enkelhet
    applikationer. Den nya metoden är utformad för att förenkla att skriva kod, medan
    samtidigt som den förblir effektiv och allmänt användbar. Gamla sätt
    fungerar fortfarande och kan vara att föredra i vissa fall.

  • Lade till möjligheten att inkludera externa filer med hjälp av ett direktiv
    /*!include:re2c "file.re" */ där file.re
    detta är namnet på include-filen. Re2c letar efter filer i filkatalogen inklusive,
    samt i listan över sökvägar som anges med alternativet -I.
    Inkluderade filer kan innehålla andra filer.
    Re2c tillhandahåller "standard"-filer i katalogen include/
    projekt - det förväntas att användbara definitioner kommer att samlas där
    reguljära uttryck, något som standardbiblioteket.
    Hittills har en fil med definitioner av Unicode-kategorier lagts till på arbetstagarnas begäran.

  • Lade till möjligheten att generera header-filer med godtyckliga
    innehåll med alternativen -t --type-header (eller lämpligt
    konfigurationer) och nya direktiv /*!header:re2c:on*/ och
    /*!header:re2c:off*/. Detta kan vara användbart i de fall där
    när re2c behöver generera definitioner av variabler, strukturer och makron,
    används i andra översättningsenheter.

  • Re2c förstår nu UTF8-literals och teckenklasser i reguljära uttryck.
    Som standard analyserar re2c uttryck som "∀x ∃y" som.
    sekvens av 1-bitars ASCII-tecken e2 88 80 78 20 e2 88 83 79
    (hex-koder), och användare måste lämna Unicode-tecken manuellt:
    "u2200x u2203y". Detta är väldigt obekvämt och oväntat för många
    användare (vilket framgår av ständiga buggrapporter). Så nu
    re2c tillhandahåller ett --input-encoding alternativ ,
    som låter dig ändra beteendet och analysera "∀x ∃y" som
    2200 78 20 2203 79.

  • Re2c tillåter nu användning av vanliga re2c-block i -r --reuse-läge.
    Detta är praktiskt om indatafilen innehåller många block och bara några av dem
    behöver återanvändas.

  • Nu kan du ställa in formatet för varningar och felmeddelanden
    med det nya alternativet --location-format . GNU-formatet visas
    som filnamn:rad:kolumn: och MSVC-formatet som filnamn(rad,kolumn).
    Den här funktionen kan vara användbar för IDE-älskare.
    Ett --verbose alternativ har också lagts till, som skriver ut ett kort segermeddelande om det lyckas.

  • "Kompatibilitets"-läget med flex har förbättrats - några analysfel har åtgärdats och
    felaktig operatörsföreträde i sällsynta fall.
    Historiskt sett tillät alternativet -F --flex-support dig att skriva kod
    blandat i flexstil och re2c-stil, vilket gör parsningen lite svår.
    Flex-kompatibilitetsläge används sällan i ny kod,
    men re2c fortsätter att stödja det för bakåtkompatibilitet.

  • Teckenklassens subtraktionsoperator / gäller nu
    innan du utökar kodningen, vilket gör att den kan användas i ett större antal fall,
    om en kodning med variabel teckenlängd används (till exempel UTF8).

  • Utdatafilen skapas nu atomiskt: re2c skapar först en temporär fil
    och skriver resultatet in i den och byter sedan namn på den temporära filen till utgången
    en operation.

  • Dokumentationen färdigställdes och skrevs om; i synnerhet tillkom nya
    kapitel om att fylla bufferten
    и om sätt att leta efter slutet av indata.
    Den nya dokumentationen samlas i formuläret
    en omfattande ensidig manual
    med exempel (samma källor återges i manpagen och i onlinedokumentationen).
    Dåliga försök har gjorts för att förbättra sajtens läsbarhet på telefoner.

  • Ur utvecklarnas synvinkel har re2c skaffat sig ett mer komplett delsystem
    felsökning Felsökningskod är nu inaktiverad i utgåvor och
    kan aktiveras med hjälp av konfigureringsalternativet --enable-debug.

Denna release tog lång tid – nästan ett helt år.
Den mesta tiden gick som alltid åt att ta fram ett teoretiskt ramverk och skriva
Artikel "Effektiv POSIX Submatch Extraction på NFA".
Algoritmerna som beskrivs i artikeln är implementerade i experimentbiblioteket libre2c
(bygga biblioteket och benchmarks är inaktiverat som standard och aktiveras av konfigureringsalternativet
--enable-libs). Biblioteket är inte tänkt som en konkurrent till existerande
projekt som RE2, men som en forskningsplattform för utveckling av nya
algoritmer (som sedan kan användas i re2c eller i andra projekt).
Det är också bekvämt ur testsynpunkt, riktmärken och att skapa bindningar till andra språk.

Tack från re2c-utvecklarna till alla som hjälpte till med denna release,
och till samhället i allmänhet för idéer, felrapporter, patchar, moral, etc. ;]

Källa: linux.org.ru

Lägg en kommentar