Lug 0.5.0

Lug 0.5.0

19. mĂ€rtsil ilmus C++ teeki Lug, mis rakendab sisseehitatud objekti-orienteeritud keelt sĂŒntaksianalĂŒsaatorite vĂ€ljendamiseks laiendatud sĂŒntaksite vĂ€ljendite grammatikas, ja levitatakse MIT litsentsi alusel.

Raamatukogu vÔimalused:

  • Looduslik sĂŒntaks, mis meenutab vĂ€liste parserigeneraatorite keeli, toetab atribuute ja semantilisi toiminguid.
  • VĂ”imalus töötada kontekstist sĂ”ltuvate grammatikatega, sealhulgas sĂŒmbolite tabelid, tingimused ja sĂŒnteetilised predikaadid.
  • Generaatorid kompileeritakse loendisse ja tĂ€idetakse sĂŒntaksianalĂŒĂŒsi virtuaalses masinas.
  • Selge eristamine sĂŒntaktiliste ja leksikaalsete reeglite vahel koos vĂ”imalusega seadistada vaikimisi valgete mĂ€rkide vahelist vahelejĂ€tmist.
  • Otsene ja kaudne vasakrekursioon, eespool mainitud tasemed sub-vĂ€ljendite eristamiseks, kus esinevad segatud vasak- ja parerekursioonid.
  • TĂ€ielik tugi UTF-8 vormingus teksti analĂŒĂŒsimiseks, sealhulgas 1. taseme ja osaline vastavus 2. taseme tehnilisele standardile UTS #18 Unicode regulaaravaldised.
  • Vea töötlemine ja taastamine mĂ€rgistatud tĂ”rgetega, taastamisreeglite ja vigade kĂ€sitlejatega.
  • Automaatne ridade ja veergude numbrite jĂ€lgimine, kohandatav laiuse ja tabulatsioonide joondamine.
  • Ainult pĂ€isega teek, mis kasutab ainult standardbiblioteegi ja C++17 standardi vĂ”imalusi. Tulevikus ĂŒhilduv C++20 ja C++23 standarditega.
  • Relatiivselt vĂ€ike teek, mille eesmĂ€rk on hoida kĂ”igi pĂ€isefailide koguarv alla 6000 rida lĂŒhikest koodi.

Muutuste nimekiri:

  • Teostatud kollektsioonide ja objektide atribuutide direktiivid. Uus direktiiv collect<C>[e] sĂŒnteesib jĂ€rjestuse vĂ”i assotsiatiivse konteineri tĂŒĂŒpi C, mis koosneb elementidest, mis on kogutud pĂ€ritud vĂ”i sĂŒnteesitud atribuutidest vĂ€ljendites e. Sarnaselt on olemas uued direktiivid synthesize<C,A
>[e], synthesize_shared<C,A
>[e] ja synthesize_unique<C,A
>[e] objektide, jagatud nĂ€idikute ja ainulaadsete nĂ€idikute sĂŒnteesimiseks, mis on loodud komponentide atribuutidest vĂ€ljendis e.
  • Rakendatud on direktiiv synthesize_collect, mis ĂŒhendab direktiivid collect ja synthesize, et parandada koodi loetavust ning vĂ€hendada malli arvu keeruliste andmestruktuuride loomisel analĂŒĂŒsitud elementidest. See on eriti kasulik sisemiste kollektsioonide, nĂ€iteks objektide massiivide vĂ”i assotsiatiivsete konteinerite loomisel, millel on keerulised vÀÀrtustĂŒĂŒbid.
  • Lisatud on malli klass lug::recursive_wrapper tsĂŒkliliste sĂ”ltuvuste töötlemiseks abstraktse sĂŒntaksi puudes, peamiselt std::variant'i kasutades.
  • Rakendatud on Unicode standardi 16.0.0 tugi ja lisatud on ehitusriistade tugi CMakeLists.txt failis.
  • Optimeeritud on vahemiku ja ASCII-mĂ€rkide komplekti vastavuse kontroll, mille tĂ”ttu on tekkinud mĂ€rkimisvÀÀrne jĂ”udluse tĂ”us levinud tekstitöötlusoperatsioonide kĂ€igus. Lisatud on spetsialiseeritud kiirete meetodite tugi, et kĂ€sitleda ainult ASCII-mĂ€rke, mis on oluliselt kiiremad kui Unicode'i töötlemise kood.
  • Rakendatud on opkoodid test vigade optimeerimiseks ja opkoodid repeat vahepealsete tĂŒhikute optimeerimiseks. Need optimeerimised sisaldatakse tĂ€ielikult jĂ€rgmises vĂ€ljalaskes pĂ€rast kavandatud vĂ€ljendite puu transformatsioone.
  • Parandatud on sisendallikate töötlemist, sealhulgas parandatud puhverdamist ja vea raportitamist std::istream'i jaoks, samuti on paranenud interaktiivse reĆŸiimi tugi, mis töötab Ă”igesti ridade kaupa sisendi töötlemisel terminali sessioonide jaoks vĂ”i lineaarsete grammatikate jaoks.
  • std::istream'i tugi on viidud eraldi pealkirjafaili <lug/iostream.hpp>. See vĂ€hendab kompileerimisaega ja minimaalitab pealkirjade sĂ”ltuvusi projektide jaoks, mis ei vaja voogude sisendi/vĂ€ljundi funktsionaalsust.
  • Parandatud on parsi loogika, kus lug::basic_parser'is on juhised sissepandud, et paremini vastata 0.4.0 versioonis esitatud virna raamistruktuuri muudatustele, mis on parandanud koodi organiseeritust ja jĂ”udlust.
  • Parandatud on probleem parsi nĂ€ites. BASIC, kui kasutajafunktsioonid (nt FNA(X)) lĂ”petasid hindamise ajal. Selle pĂ”hjustasid muudatused versioonis 0.4.0, mis lĂ€htestasid lug::environment sĂŒgavate analĂŒĂŒside ajal. Uus funktsioon lug::environment::should_reset_on_parse vĂ”imaldab selget kontrolli selle kĂ€itumise ĂŒle, vĂ”imaldades keskkonnal pĂŒsida sĂŒvategevuste ajal, kui see on vajalik.
  • Lisatud pĂ”hjalik nĂ€idisprogrammide testimise infrastruktuur.
  • Kaustade hierarhia on ĂŒmber korraldatud.
  • Laiema ĂŒhilduvuse tagamiseks GitHub CI-s on lisatud tĂ€iendavate kompilatsioonide tugi (GCC 9/10/11/12, Clang 14/15/16/17).
  • GitHub CI-s on lisatud staatilised analĂŒsaatorid Clang ja MSVC.
  • GitHub CI-sse on lisatud Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) ja Memory Sanitizer (MSan).
  • GitHub CI-s on lisatud clang-tidy integreerimine.
  • GitHub CI-s on eemaldatud Ubuntu 20.04 kasutamine.

Allikas: linux.org.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster