odehrál se uvolnění re2c, bezplatný generátor lexikálního analyzátoru pro jazyky C a C++. Připomeňme, že re2c napsal v roce 1993 Peter Bambulis jako experimentální generátor velmi rychlých lexikálních analyzátorů, lišících se od ostatních generátorů rychlostí generovaného kódu a neobvykle flexibilním uživatelským rozhraním, které umožňuje snadno a efektivně integrovat analyzátory do existujícího kódu. základna. 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ů.
Příprava vydání trvala 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í POSIX Submatch Extrakce na NFA".
Algoritmy popsané v článku jsou implementovány v experimentální knihovně libre2c
(vytváření knihovny a výkonnostních testů je ve výchozím nastavení zakázáno a je povoleno konfigurační volbou „—enable-libs“). Knihovna není zamýšlena jako konkurence stávajících projektů, jako je 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í, měření výkonu a vytváření vazeb na jiné jazyky.
Hlavní inovace ve verzi re2c 1.2:
Přidána nová zjednodušená metoda pro kontrolu konce vstupních dat („pravidlo EOF“). 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 "file.re" je název souboru, který má být zahrnut. Re2c hledá soubory v adresáři včetně souborů,
stejně jako v seznamu cest specifikovaný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 možnost "--input-encoding {ascii | utf8}",
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 {gnu | msvc}. Zobrazí se formát GNU
jako "filename:line:column:" a formát MSVC jako "filename(line,column)".
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 zobrazí 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.
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í možnosti konfigurace "--enable-debug".