Lug 0.5.0

Lug 0.5.0

Den 19 mars slÀpptes C++-biblioteket Lug, som implementerar en inbÀddad domÀnspecifik sprÄk för att uttrycka parserbyggare i form av utökade grammatiker för syntaxuttryck, och distribueras under MIT-licens.

Möjligheter i biblioteket:

  • Ett naturligt syntax som pĂ„minner om sprĂ„k för externa parsergeneratorer, med stöd för attribut och semantiska handlingar.
  • Möjlighet att arbeta med kontextberoende grammatik med symboltabeller, villkor och syntaktiska predikat.
  • De genererade parserna kompileras till bytekod och körs i en parsermaskin.
  • Tydlig uppdelning av syntaktiska och lexikala regler med möjlighet att konfigurera implicit utelĂ€mnande av vita tecken.
  • Stöd för direkt och indirekt vĂ€nster rekursion, med prioritetsnivĂ„er för att sĂ€rskilja underuttryck med blandade vĂ€nster och höger rekursioner.
  • FullstĂ€ndigt stöd för analys av text i UTF-8-format, inklusive nivĂ„ 1 och delvis överensstĂ€mmelse med nivĂ„ 2 i den tekniska standarden UTS #18 Unicode Regular Expressions.
  • Felkontroll och Ă„terstĂ€llning med markerade fel, Ă„terstĂ€llningsregler och felhanterare.
  • Automatisk spĂ„rning av rad- och kolumnnummer, anpassningsbar bredd och tabulatorjustering.
  • Ett header-only-bibliotek som endast anvĂ€nder standardbiblioteket och funktioner frĂ„n C++17-standarden. FramtidssĂ€kert kompatibelt med standarderna C++20 och C++23.
  • Relativt liten storlek pĂ„ biblioteket, med syftet att hĂ„lla det totala antalet rader i alla headerfiler under 6000 rader koncis kod.

Ändringslista:

  • Direktiv för samlingar och objektattribut har implementerats. Det nya direktivet collect<C>[e] syntetiserar en sekvens eller associativ behĂ„llare av typ C, bestĂ„ende av element insamlade frĂ„n Ă€rvda eller syntetiserade attribut i uttrycket e. PĂ„ liknande sĂ€tt har nya direktiv synthesize<C,A
>[e], synthesize_shared<C,A
>[e] och synthesize_unique<C,A
>[e] införts för att syntetisera objekt, delade pekare och unika pekare respektive, byggda av komponenternas attribut i uttrycket e.
  • Direktivet synthesize_collect har införts, vilket kombinerar direktiven collect och synthesize för att förbĂ€ttra kodens lĂ€sbarhet och minska antalet mallar vid byggande av komplexa datastukturer frĂ„n analyserade element. Detta Ă€r sĂ€rskilt anvĂ€ndbart för att skapa inbĂ€ddade samlingar, sĂ„som array av objekt eller associativa containrar med komplexa vĂ€rdetyper.
  • Den mallbaserade klassen lug::recursive_wrapper har lagts till för att hantera cykliska beroenden i abstrakta syntaxi-trĂ€d, specifikt de som anvĂ€nder std::variant.
  • Stödet för Unicode-standard 16.0.0 har implementerats och stöd för byggverktyg har lagts till i CMakeLists.txt.
  • Prioriteringen av omrĂ„desmatchning och uppsĂ€ttningar av ASCII-tecken har optimerats, vilket resulterat i en betydande ökning av prestanda vid utförandet av vanliga textbehandlingsoperationer. Snabbare specialiserade metoder för att bara bearbeta ASCII-tecken har lagts till, vilket Ă€r betydligt snabbare Ă€n Unicode-bearbetningskoden.
  • Op-koderna test har implementerats för att optimera fel och op-koderna repeat har implementerats för att optimera utelĂ€mnande av vita tecken. Dessa optimeringar kommer att helt inkluderas i nĂ€sta version efter de planerade transformationerna av uttryckstrĂ€det.
  • Bearbetningen av ingĂ„ngskĂ€llor har förbĂ€ttrats med förbĂ€ttrad buffring och felrapporter för std::istream, samt förbĂ€ttrat stöd för interaktivt lĂ€ge, som korrekt hanterar radvis inmatning för terminalsessioner eller för linjĂ€rt orienterade grammatik.
  • Stödet för std::istream har flyttats till en separat headerfil <lug/iostream.hpp>. Detta minskar kompileringstiden och minimerar headerberoenden för projekt som inte krĂ€ver strömning av in/ut-funktioner.
  • Logiken för parserfixering har omdesignats genom att inlinna instruktioner i lug::basic_parser för att bĂ€ttre anpassa sig till förĂ€ndringar i stackramarkitekturen som presenterades i version 0.4.0, vilket förbĂ€ttrade kodens struktur och prestanda.
  • Ett problem i parserexemplet har Ă„tgĂ€rdats. BASIC, nĂ€r anvĂ€ndarfunktioner (t.ex. FNA(X)) avslutades under utvĂ€rdering. Detta orsakades av Ă€ndringar i version 0.4.0 som Ă„terstĂ€llde lug::environment under inbĂ€ddade parseroperationer. En ny funktion lug::environment::should_reset_on_parse har lagts till för att sĂ€kerstĂ€lla finjusterad kontroll över detta beteende, vilket gör att miljön kan bevaras under inbĂ€ddade parsingoperationer nĂ€r det Ă€r nödvĂ€ndigt.
  • En omfattande testinfrastruktur för programexempel har lagts till.
  • Kataloghierarkin för include har omstrukturerats.
  • För större kompatibilitet i GitHub CI har stöd för ytterligare kompilatorer lagts till (GCC 9/10/11/12, Clang 14/15/16/17).
  • Clang och MSVC statiska analysatorer har lagts till i GitHub CI.
  • Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) och Memory Sanitizer (MSan) har lagts till i GitHub CI.
  • Integration av clang-tidy har lagts till i GitHub CI.
  • AnvĂ€ndningen av Ubuntu 20.04 har tagits bort i GitHub CI.

KĂ€lla: linux.org.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster