Fredag den 2 august slÀpptes re2c - en fri generator för lexikala analysatorer för C och C++. Det bör pÄminnas om att re2c skrevs av Peter Bamlis Är 1993 som en experimentell generator för mycket snabba lexikala analysatorer, som skiljer sig frÄn andra generatorer genom hastigheten pÄ den genererade koden och den ovanligt flexibla anvÀndargrÀnssnittet, vilket gör det enkelt och effektivt att integrera analysatorer i befintlig kodbas. Sedan dess har projektet utvecklats av communityn och fortsÀtter att vara en plattform för experiment och forskning inom formella grammatik och slutna automater.
Huvudsakliga nyheter i version 1.2:
En ny (förenklad) metod för att kontrollera slutet av indata har lagts till
(eng. "EOF rule").
För detta ÀndamÄl har konfigurationen re2c:eof lagts till,
som lÄter dig vÀlja en terminalsymbol,
och en speciell regel $ som triggas om lexern
framgÄngsrikt nÄr slutet av indata.
Historiskt sett har re2c erbjudit flera sÀtt att kontrollera för
slutet av indata, som varierar i begrÀnsning, effektivitet och enkelhet
av tillÀmpning. Den nya metoden syftar till att förenkla skrivandet av kod, samtidigt som den
förblir effektiv och allmÀnt tillÀmplig. De gamla metoderna
fungerar fortfarande och kan vara att föredra i vissa fall.Möjlighet att inkludera externa filer med hjÀlp av direktivet har lagts till,
/*!include:re2c "file.re" */, гЎД file.re
detta Àr namnet pÄ den inkluderade filen. Re2c letar efter filer i katalogen för den inkluderande filen,
liksom i listan över vÀgar angivna med hjÀlp av alternativet -I.
Inkluderade filer kan inkludera andra filer.
Re2c tillhandahÄller "standard" filer i katalogen include/
i projektet - det antas att nyttiga definitioner
av reguljÀra uttryck kommer att samlas dÀr, nÄgot i stil med standardbiblioteket.
Hitintills har ett fil med definitioner av Unicode-kategorier lagts till efter önskemÄl frÄn anvÀndarna.Möjlighet att generera headerfiler med godtyckligt
innehĂ„ll har lagts till genom alternativ -t âtype-header (eller motsvarande
konfigurationer) och nya direktiv !header:re2c:on och
/*!header:re2c:off*/. ĐŃĐŸ ĐŒĐŸĐ¶Đ”Ń Đ±ŃŃŃ ĐżĐŸĐ»Đ”Đ·ĐœĐŸ ĐČ ŃĐ»ŃŃаŃŃ ,
nÀr re2c ska generera definitioner av variabler, strukturer och makron,
som anvÀnds i andra översÀttningsenheter.Re2c förstÄr nu UTF8-litteraler och teckenkategorier i reguljÀra uttryck.
Som standard tolkar re2c uttryck som "âx ây" som.
en sekvens av 1-bit ASCII-tecken e2 88 80 78 20 e2 88 83 79
(hex-koder), och anvÀndare mÄste manuellt skala Unicode-tecken:
"u2200x u2203y". Detta Àr mycket besvÀrligt och ovÀntat för mÄnga
anvÀndare (som bevisas av stÀndiga buggrapporter). DÀrför
tillhandahĂ„ller re2c nu alternativet âinput-encoding ,
som tillĂ„ter att Ă€ndra beteendet och analysera "âx ây" som
2200 78 20 2203 79.Re2c gör det möjligt att anvĂ€nda vanliga re2c-block i lĂ€get -r âreuse.
Detta Àr praktiskt om ingÄngsfilen innehÄller mÄnga block, och bara en del av dem
behöver ÄteranvÀndas.Det har blivit möjligt att stÀlla in formatet för varningar och felmeddelanden
genom det nya alternativet âlocation-format . GNU-formatet visas
som filnamn:rad:kollumn:, medan MSVC-formatet visas som filnamn(rad,kollumn).
Denna funktion kan vara anvÀndbar för IDE-entusiaster.
Det har ocksĂ„ lagts till ett alternativ âverbose, vilket skriver ut ett kort framgĂ„ngsmeddelande vid lyckande.KompatibilitetslĂ€get med flex har förbĂ€ttrats â vissa parserfel har rĂ€ttats till och
fel prioritering av operatorer i sÀllsynta fall.
Historiskt sett tillĂ„ter alternativet -F âflex-support att skriva kod
i blandad stil av flex och re2c, vilket nÄgot komplicerar syntaktisk analys.
Flex-kompatibilitetslÀget anvÀnds sÀllan i ny kod,
men re2c fortsÀtter att stödja det för bakÄtkompatibilitet.Operatorn för subtraktion av teckenklasser / tillÀmpas nu
före avkodning av kodningen, vilket möjliggör dess tillÀmpning i fler fall,
om variabel-lÀngd teckenkodning (t.ex. UTF8) anvÀnds.Utkastfilen skapas nu atomÀrt: re2c skapar först en temporÀr fil
och skriver resultatet till den, och döper sedan om den temporÀra filen till utdata
i en enda operation.Dokumentationen har uppdaterats och skrivits om; nya
och om metoder för att kontrollera slutet av indatan.
Den nya dokumentationen har sammanstÀllts i form av
en omfattande endagarsmanual
med exempel (samma kÀllkoder ritas ut i manpage och i online-dokumentationen).
Svaga försök har gjorts för att förbÀttra webbplatsens lÀsbarhet pÄ telefoner.Ur ett utvecklarperspektiv har re2c fÄtt ett mer komplett system för
felsökning. Felsökningskoden Àr nu avstÀngd i release-versioner och
kan aktiveras med configure-alternativet âenable-debug.
Den hĂ€r versionen har tagit lĂ„ng tid â nĂ€stan ett helt Ă„r.
Det mesta av tiden har, som alltid, gÄtt Ät till att utveckla den teoretiska grunden och skriva
artiklar «Efficient POSIX Submatch Extraction on NFA».
Algoritmerna som beskrivs i artikeln har implementerats i det experimentella biblioteket libre2c
(bygge av biblioteket och benchmark-testning Àr avstÀngt som standard och aktiveras med configure-alternativet
âenable-libs). Biblioteket Ă€r inte tĂ€nkt att vara en konkurrent till befintliga
projekt som RE2, utan som en forskningsplattform för att utveckla nya
algoritmer (som senare kan anvÀndas i re2c eller andra projekt).
Detta Àr ocksÄ praktiskt med avseende pÄ testning, benchmarking och skapande av bindningar till andra sprÄk.
Tack frÄn utvecklarna av re2c till alla som hjÀlpt till att göra denna version möjlig,
och till hela gemenskapen för idéer, buggrapporter, patchar, kÀmpaanda osv. ;]
KĂ€lla: linux.org.ru
