Release av re2c 2.0 lexical analysator generator

tog plats släpp re2c 2.0, en gratis lexikalanalysgenerator för C- och C++-språk. Re2c-projektet skapades ursprungligen 1993 av Peter Bamboulis som en experimentell generator av mycket snabba lexikalanalysatorer, som skiljer sig 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.

Huvudändringar:

  • Lade till stöd för Go-språket (aktiverat antingen av alternativet "--lang go" för re2c, eller som ett separat re2go-program). Dokumentationen för C och Go är genererad från samma text, men med olika kodexempel. Kodgenereringsundersystemet i re2c har gjorts om helt, vilket borde göra det lättare att stödja nya språk i framtiden.
  • Lade till alternativt byggsystem på CMake (tack ligfx!). Försök att översätta re2c till CMake har gjorts under lång tid, men fram till ligfx föreslog ingen en fullfjädrad lösning. Det gamla byggsystemet Autotools fortsätter att stödjas och användas, och det finns inga planer på att överge det inom överskådlig framtid (delvis för att undvika att skapa problem för distributionsutvecklare, dels för att det gamla byggsystemet är mer stabilt och mer koncist än det nya ). Båda systemen testas kontinuerligt med Travis CI.
  • Lade till möjligheten att ange gränssnittskod i konfigurationer vid användning av det generiska API:et. Tidigare behövde de flesta API:er specificeras i form av funktioner eller funktionsmakron. Nu kan de specificeras i form av godtyckliga strängar med namngivna mallparametrar av formen "@@{namn}" eller helt enkelt "@@" (om det bara finns en parameter och det inte finns någon tvetydighet). API-stilen ställs in av re2c:api:style-konfigurationen (funktionsvärdet anger den funktionella stilen, och fri form anger en godtycklig stil).
  • Funktionen för "-c", "—start-villkor"-alternativet har förbättrats, så att du kan kombinera flera sammankopplade lexers i ett re2c-block. Nu kan du använda vanliga block tillsammans med villkorliga block och definiera flera orelaterade villkorliga block i en fil. Förbättrad funktion av alternativet "-r", "--reuse" (återanvändning av kod från ett block i andra block) i kombination med "-c", "--start-villkor" och "-f", "-- lagringsbart tillstånd"-alternativ (en tillståndsfull lexer som kan avbrytas när som helst och fortsätta körningen senare).
  • Fixade en bugg i den nyligen tillagda end-of-input (EOF-regeln) algoritmen, vilket i sällsynta fall resulterade i felaktig bearbetning av överlappande regler.
  • Bootstrap-processen har förenklats. Tidigare försökte byggsystemet att dynamiskt hitta en redan byggd re2c som kunde användas för att bygga om sig själv. Detta ledde till felaktiga beroenden (eftersom beroendegrafen var dynamisk, vilket de flesta byggsystem inte gillar). Nu, för att bygga om lexers, måste du explicit konfigurera byggsystemet och ställa in variabeln RE2C_FOR_BUILD.

Källa: opennet.ru

Lägg en kommentar