Lug 0.5.0

Lug 0.5.0

19. marca je bila izdana C++ knjižnica Lug, ki implementira vgrajeni predmetno usmerjeni jezik za izražanje sintaktičnih analizatorjev v obliki razširjenih slovarjev sintaktičnih izrazov, in se distribuira pod MIT licenco.

Možnosti knjižnice:

  • Naravna sintaksa, podobna jezikom zunanjih generatorjev analizatorjev, s podporo za atribute in semantične akcije.
  • Možnost dela s kontekstno odvisnimi slovnicami s tabelami simbolov, pogoji in sintaktičnimi predikati.
  • Generirani analizatorji se kompilirajo v bajtkod in izvajajo v virtualnem stroju sintaktične analize.
  • Jasna ločitev sintaktičnih in leksikalnih pravil s možnostjo prilagajanja implicitnega preskočitve presledkov.
  • Podpora za neposredno in posredno levi rekurzivnost, z nivoji prednost, ki ločujejo podizraz s mešanimi levimi in desnimi rekurzijami.
  • Popolna podpora za razčlenitev besedila v formatu UTF-8, vključno z nivojem 1 in delnim skladanjem z nivojem 2 tehničnega standarda UTS #18 Unicode Regular Expressions.
  • Obravnava napak in okrevanje z uporabo označenih napak, pravil za okrevanje in obdelovalcev napak.
  • Samodejno sledenje številom vrstic in stolpcev, nastavljiva širina in poravnava tabulacij.
  • Header-only knjižnica, ki uporablja samo standardno knjižnico in možnosti standarda C++17. Perspektivno združljiva s standardi C++20 in C++23.
  • Razmeroma majhna velikost knjižnice, s ciljem, da skupno število vrstic v vseh naslovnih datotekah ostane pod 6000 vrsticami jedrnatega kode.

Seznam sprememb:

  • Izvedene so bile direktive zbirk in atributov objektov. Nova direktiva collect<C>[e] sintetizira zaporedje ali asociativno strukturo tipa C, sestavljeno iz elementov, zbranih iz dedovanih ali sintetiziranih atributov v izrazu e. Podobno so se pojavile nove direktive synthesize<C,A…>[e], synthesize_shared<C,A…>[e] in synthesize_unique<C,A…>[e] za sintezo objektov, skupnih kazalcev in edinstvenih kazalcev, ki so bili zgrajeni iz atributov komponent v izrazu e.
  • Implementirana je direktiva synthesize_collect koja integriše direktive collect i synthesize radi poboljšanja čitljivosti koda i smanjenja broja šablona prilikom izgradnje složenih struktura podataka iz analiziranih elemenata. Ovo je posebno korisno za kreiranje ugniježdenih kolekcija, kao što su nizovi objekata ili asocijativni kontejneri sa složenim tipovima vrednosti.
  • Dodata je šablonska klasa lug::recursive_wrapper za obradu cikličnih zavisnosti u stablima apstraktnog sintaksa, posebno onima koji koriste std::variant.
  • Implementirana je podrška za Unicode standard 16.0.0 i dodana je podrška za alate za izgradnju u CMakeLists.txt.
  • Optimizirano je mapiranje opsega i skupa ASCII simbola, što je dovelo do značajnog povećanja performansi prilikom izvođenja uobičajenih operacija obrade teksta. Dodani su specijalizovani brzi načini za obradu samo ASCII simbola koji su znatno brži od koda za obradu Unicode.
  • Implementirani su opkodi test za optimizaciju grešaka i opkodi repeat za optimizaciju preskakanja belih simbola. Ove optimizacije će biti potpuno uključene u sledećem izdanju nakon planiranih transformacija stabla izraza.
  • Poboljšana je obrada izvora ulaza sa poboljšanim keširanjem i izveštavanjem o greškama za std::istream, kao i poboljšana podrška za interaktivni režim, koja ispravno obrađuje unos po linijama za terminalne sesije ili linearnim gramatikama.
  • Podrška za std::istream premestena je u poseban zaglavni fajl . Ovo smanjuje vreme kompilacije i minimizira zavisnosti od zaglavlja za projekte kojima nije potrebna funkcionalnost tokova ulaza/izlaza.
  • Preformulisana je logika fiksiranja parsera putem inlining-a instrukcija u lug::basic_parser radi boljeg usklađivanja sa promenama u arhitekturi stog okvira predstavljene u verziji 0.4.0, što je poboljšalo organizaciju koda i performanse.
  • Ispravljena je greška u primeru parsera. BASIC, ko so uporabniške funkcije (na primer FNA(X)) končale med oceno. To je bilo posledica sprememb v različici 0.4.0, ki so ponastavile lug::environment med vgrajenimi operacijami za analiziranje sintakse. Dodana je nova funkcija lug::environment::should_reset_on_parse za omogočanje natančne kontrole nad to obnašanjem, kar omogoča, da okolje ostane med vgrajenimi operacijami razčlenjevanja, kadar je to potrebno.
  • Dodana je kompleksna infrastruktura za testiranje primerov programov.
  • Preoblikovana je hierarhija map include.
  • Za zagotovitev večje združljivosti v GitHub CI je bila dodana podpora za dodatne prevajalnike (GCC 9/10/11/12, Clang 14/15/16/17).
  • V GitHub CI so bili dodani statični analizatorji Clang in MSVC.
  • V GitHub CI so bili dodani Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) in Memory Sanitizer (MSan).
  • V GitHub CI je bila dodana integracija clang-tidy.
  • V GitHub CI je bila odstranjena uporaba Ubuntu 20.04.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster