V pátek 2. srpna byla vydána verze re2c, bezplatného generátoru lexikálních analyzátorů pro jazyky C a C++. Re2c byl napsán v roce 1993 Peterem Bamboulisem jako experimentální generátor velmi rychlých lexikálních analyzátorů, které se od ostatních generátorů odlišují rychlostí generovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadné a efektivní zabudování analyzátorů do existující kódové báze. Od té doby je projekt vyvíjen komunitou a nadále je platformou pro experimenty a výzkum v oblasti formálních gramatik a konečných automatů.
Hlavní novinky ve verzi 1.2:
Přidán nový (zjednodušený) způsob kontroly konce vstupních dat
(anglicky „EOF rule“).
Za tímto účelem byla přidána konfigurace re2c:eof,
umožňuje vybrat koncový znak,
a speciální $ pravidlo, které se spustí, pokud lexer
úspěšně dosáhl konce vstupních dat.
Historicky re2c poskytuje výběr z několika ověřovacích metod
konec vstupů se liší omezením, účinností a jednoduchostí
aplikací. Nová metoda je navržena tak, aby zjednodušila psaní kódu
a přitom zůstávají účinné a široce použitelné. Staré způsoby
stále fungují a v některých případech mohou být preferovány.
Přidána možnost zahrnout externí soubory pomocí direktivy
/*!include:re2c "file.re" */ kde soubor.re
toto je název začleněného souboru. Re2c hledá soubory v adresáři včetně souborů,
stejně jako v seznamu cest zadaných pomocí volby -I.
Zahrnuté soubory mohou obsahovat další soubory.
Re2c poskytuje "standardní" soubory v adresáři include/
projekt - očekává se, že se tam budou hromadit užitečné definice
regulární výrazy, něco jako standardní knihovna.
Zatím byl na žádost pracovníků přidán jeden soubor s definicemi kategorií Unicode.
Přidána možnost generovat soubory záhlaví s libovolným
obsahu pomocí voleb -t --type-header (nebo vhodných
konfigurace) a nové direktivy /*!header:re2c:on*/ a
/*!header:re2c:off*/. To může být užitečné v případech, kdy
když re2c potřebuje generovat definice proměnných, struktur a maker,
používané v jiných překladových jednotkách.
Re2c nyní rozumí literálům UTF8 a třídám znaků v regulárních výrazech.
Ve výchozím nastavení re2c analyzuje výrazy jako "∀x ∃y" jako.
sekvence 1bitových znaků ASCII e2 88 80 78 20 e2 88 83 79
(hexadecimální kódy) a uživatelé musí znaky Unicode escapovat ručně:
"u2200x u2203y". To je pro mnohé velmi nepohodlné a nečekané
uživatelů (jak dokládají neustálé zprávy o chybách). Tak teď
re2c poskytuje volbu --input-encoding ,
což vám umožňuje změnit chování a analyzovat "∀x ∃y" jako
2200 78 20 2203 79.
Re2c nyní umožňuje použití běžných bloků re2c v režimu -r --reuse.
To je výhodné, pokud vstupní soubor obsahuje mnoho bloků a pouze některé z nich
je třeba znovu použít.
Nyní můžete nastavit formát varování a chybových zpráv
pomocí nové možnosti --location-format . Zobrazí se formát GNU
jako název_souboru:řádek:sloupec: a formát MSVC jako název_souboru(řádek,sloupec).
Tato funkce může být užitečná pro milovníky IDE.
Byla také přidána možnost --verbose, která v případě úspěchu vytiskne krátkou zprávu o vítězství.
Režim "kompatibility" s flex byl vylepšen - byly opraveny některé chyby analýzy a
ve vzácných případech nesprávná priorita operátorů.
Historicky vám volba -F --flex-support umožňovala psát kód
smíchané ve stylu flex a stylu re2c, což ztěžuje analýzu.
Režim kompatibility Flex se v novém kódu používá zřídka,
ale re2c jej nadále podporuje pro zpětnou kompatibilitu.
Nyní platí operátor odečítání znakové třídy /
před rozšířením kódování, což umožňuje jeho použití ve větším počtu případů,
pokud je použito kódování s proměnnou délkou znaků (například UTF8).
Výstupní soubor je nyní vytvořen atomicky: re2c nejprve vytvoří dočasný soubor
a zapíše do něj výsledek a poté přejmenuje dočasný soubor na výstup
jedna operace.
Dokumentace byla dokončena a přepsána; zejména přibyly nové kapitol o naplnění zásobníku
и o způsobech kontroly konce vstupních dat.
Nová dokumentace se shromažďuje ve formuláři obsáhlý jednostránkový manuál
s příklady (stejné zdroje jsou vykresleny v manuálové stránce a v online dokumentaci).
Byly učiněny chabé pokusy zlepšit čitelnost stránky na telefonech.
Z pohledu vývojářů získal re2c ucelenější subsystém
ladění Ladicí kód je nyní zakázán ve verzích vydání a
lze povolit pomocí konfigurační volby --enable-debug.
Toto vydání trvalo dlouho - téměř celý rok.
Většinu času, jako vždy, strávil na vývoji teoretického rámce a psaní
články „Efektivní extrakce submatch POSIX na NFA“.
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(vytváření knihovny a benchmarků je ve výchozím nastavení zakázáno a je povoleno volbou configure
--enable-libs). Knihovna není koncipována jako konkurence stávající
projekty jako RE2, ale jako výzkumná platforma pro vývoj nových
algoritmy (které pak mohou být použity v re2c nebo v jiných projektech).
Je to pohodlné i z hlediska testování, benchmarků a vytváření vazeb na jiné jazyky.
Díky vývojářům re2c všem, kteří pomohli k tomuto vydání,
a komunitě obecně za nápady, hlášení chyb, opravy, morálku atd. ;]