Lug 0.5.0

Lug 0.5.0

19. marca bol vydaný C++ knižnica Lug, ktorá implementuje zabudovaný predmetovo orientovaný jazyk na vyjadrenie syntaktických analyzátorov vo forme rozšírených gramatík syntaktických výrazov, a je distribuovaná na základe licencie MIT.

Možnosti knižnice:

  • Prírodná syntax pripomínajúca jazyky vonkajších generátorov parserov, s podporou atribútov a sémantických akcií.
  • Možnosť práce s kontextovo závislými gramatikami so symbolovými tabuľkami, podmienkami a syntaktickými predikátmi.
  • Generované analyzátory sú kompilované do bajtkódu a vykonávané vo virtuálnej strojnej syntaktickej analýze.
  • Jasné oddelenie syntaktických a lexikálnych pravidiel s možnosťou nastavenia neexplicitného preskakovania bielych znakov.
  • Podpora priamej a nepriamych ľavých rekurzií, s úrovňami priorit pre oddeľovanie podvýrazov so zmiešanými ľavými a pravými rekurziami.
  • Úplná podpora analýzy textu vo formáte UTF-8, vrátane úrovne 1 a čiastočného súladu s úrovňou 2 technického štandardu UTS #18 Unicode Regular Expressions.
  • Spracovanie chýb a obnova pomocou označených zlyhaní, pravidiel obnovy a obsluhy chýb.
  • Automatické sledovanie čísel riadkov a stĺpcov, prispôsobiteľná šírka a zarovnanie tabulátorov.
  • Header-only knižnica, ktorá využíva iba štandardnú knižnicu a možnosti štandardu C++17. Perspektívne je kompatibilná so štandardmi C++20 a C++23.
  • Relatívne malá veľkosť knižnice, s cieľom udržať celkový počet riadkov vo všetkých hlavičkových súboroch pod úrovňou 6000 riadkov stručného kódu.

Zoznam zmien:

  • Implementované sú direktívy kolekcií a atribútov objektov. Nová direktíva collect<C>[e] syntetizuje sekvenciu alebo asociatívny kontajner typu C, pozostávajúci z prvkov, zhromaždených z dedičných alebo syntetizovaných atribútov vo výraze e. Podobne pribudli nové direktívy synthesize<C,A…>[e], synthesize_shared<C,A…>[e] a synthesize_unique<C,A…>[e] na syntézu objektov, zdieľaných ukazovateľov a unikátnych ukazovateľov, postavených z atribútov komponentov vo výraze e.
  • Implementovaná direktíva synthesize_collect, ktorá spája direktívy collect a synthesize na zlepšenie čitateľnosti kódu a zníženie počtu šablón pri vytváraní zložitých dátových štruktúr z rozdelených prvkov. To je obzvlášť užitočné pri vytváraní vnorených kolekcií, ako sú polia objektov alebo asociatívne kontajnery so zloženými typmi hodnôt.
  • Pridaná šablónová trieda lug::recursive_wrapper na spracovanie cyklických závislostí v stromoch abstraktného syntaktického stromu, konkrétne tých, ktoré používajú std::variant.
  • Implementovaná podpora štandardu Unicode 16.0.0 a pridaná podpora nástrojov na zostavenie v CMakeLists.txt.
  • Optimalizované porovnávanie rozsahu a sady ASCII znakov, čo viedlo k výraznému zvýšeniu výkonu pri vykonávaní bežných textových spracovaní. Pridané špecializované rýchle spôsoby na spracovanie iba ASCII znakov, ktoré sú výrazne rýchlejšie ako kód spracovania Unicode.
  • Implementované opkódy test na optimalizáciu chýb a opkódy repeat na optimalizáciu preskakovania bielych znakov. Tieto optimalizácie budú úplne zahrnuté v nasledujúcom vydaní po plánovaných transformáciách stromu výrazov.
  • Vylepšené spracovanie vstupných zdrojov s vylepšeným bufferingom a hlásením chýb pre std::istream, rovnako ako zlepšená podpora interaktívneho režimu, ktorá správne spracováva riadkový vstup pre terminálové relácie alebo pre lineárne orientované gramatiky.
  • Podpora std::istream bola presunutá do samostatného hlavičkového súboru . To znižuje čas kompilácie a minimalizuje závislosti na hlavičkách pre projekty, ktoré nepotrebujú funkčnosť prúdu vstupu/výstupu.
  • Prepracovaná logika fixácie parsera inlinovaním inštrukcií v lug::basic_parser pre lepšiu zhody s architektonickými zmenami zásobníkového rámca predstavenými vo verzii 0.4.0, čo zlepšilo organizáciu kódu a výkon.
  • Opravený problém v príklade parsera BASIC, keď používateľské funkcie (napríklad FNA(X)) skončili počas hodnotenia. Toto bolo spôsobené zmenami vo verzii 0.4.0, ktoré resetovali lug::environment počas vnorených syntaktických operácií. Bola pridaná nová funkcia lug::environment::should_reset_on_parse na zabezpečenie jemnej kontroly nad týmto správaním, aby sa umožnilo prostrediu uchovať sa počas vnorených analýz, keď je to potrebné.
  • Bola pridaná komplexná infraštruktúra na testovanie príkladov programu.
  • Bola prebudovaná hierarchia adresárov include.
  • Na zabezpečenie širšej kompatibility v GitHub CI bola pridaná podpora pre ďalšie kompilátory (GCC 9/10/11/12, Clang 14/15/16/17).
  • Do GitHub CI boli pridané statické analyzátory Clang a MSVC.
  • Do GitHub CI boli pridané Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) a Memory Sanitizer (MSan).
  • Do GitHub CI bola pridaná integrácia clang-tidy.
  • Z GitHub CI bola odstránená podpora pre Ubuntu 20.04.

Zdroj: linux.org.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster