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
