Lug 0.5.0

Lug 0.5.0

Március 19-én megjelent a C++ könyvtár Lug, amely beágyazott tematikus nyelvet valósít meg szintaktikai elemzők kifejezésére kiterjesztett szintaktikai kifejezés grammatikájával, és MIT licenc alatt terjesztik.

A könyvtár lehetőségei:

  • Természetes szintaxis, amely emlékeztet a külső elemzőgenerátorok nyelveire, támogatja a tulajdonságokat és a szemantikai műveleteket.
  • Lehetőség kontextusfüggő grammák használatára szimbólum táblákkal, feltételekkel és szintaktikai predikátumokkal.
  • A generált elemzők bájt kódra fordulnak, és a szintaktikai elemzés virtuális gépén futnak.
  • Világos elválasztás a szintaktikai és lexikai szabályok között, lehetőség implicit fehér karakterek kihagyásának testreszabására.
  • Közvetlen és közvetett bal rekurrencia támogatása, prioritási szintek a bal és jobb rekurrenciákat keverő rész-kifejezések megkülönböztetésére.
  • Teljes támogatás UTF-8 szöveg elemzésére, beleértve az 1-es szintet és a 2-es szinttel részleges megfelelési technikai szabványt UTS #18 Unicode Reguláris Kifejezések.
  • Hiba feldolgozás és helyreállítás címkézett hibák, helyreállítási szabályok és hiba kezelők segítségével.
  • Soros és oszlopszámok automatikus nyomon követése, testreszabható szélesség és tabulátor igazítás.
  • Header-only könyvtár, amely csak a standard könyvtárat és a C++17 szabvány funkcióit használja. Jövőbeli kompatibilitás a C++20 és C++23 szabványokkal.
  • Viszonylag kis könyvtárméret, célja, hogy a teljes sorok száma az összes fejlécfájlban 6000 sor tömör kód alatt maradjon.

Változások listája:

  • Megvalósultak a gyűjtemények és objektumok attribútumait irányító direktívák. Az új collect<C>[e] direktíva egy C típusú szekvenciát vagy társított tárolót szintetizál, amely elemekből áll, amelyeket a kifejezésben e öröklődő vagy szintetizált attribútumai gyűjtöttek össze. Hasonlóképpen új synthesize<C,A…>[e], synthesize_shared<C,A…>[e] és synthesize_unique<C,A…>[e] direktívák jelentek meg, amelyek közös mutatók és egyedi mutatók szintetizálására szolgálnak a kifejezésben e komponens attribútumai alapján.
  • A synthesize_collect directive has been implemented, which combines the collect and synthesize directives to improve code readability and reduce the number of templates when constructing complex data structures from parsed elements. This is especially useful for creating nested collections, such as arrays of objects or associative containers with complex value types.
  • A template class lug::recursive_wrapper has been added to handle cyclic dependencies in abstract syntax trees, particularly those using std::variant.
  • Support for Unicode standard 16.0.0 has been implemented, along with build tool support in CMakeLists.txt.
  • Range matching and ASCII character set matching have been optimized, resulting in significant performance increases during common text processing operations. Specialized fast methods have been added for processing only ASCII characters, which are significantly faster than the Unicode processing code.
  • Test opcodes have been implemented to optimize error handling, and repeat opcodes have been implemented to optimize whitespace character skipping. These optimizations will be fully included in the next release after planned expression tree transformations.
  • Input source handling has been improved with enhanced buffering and error reporting for std::istream, as well as improved support for interactive mode, which correctly handles line-by-line input for terminal sessions or line-oriented grammars.
  • Support for std::istream has been moved to a separate header file . This reduces compilation time and minimizes header dependencies for projects that do not require stream I/O functionality.
  • The parser's locking logic has been redesigned by inlining instructions in lug::basic_parser to better align with the changes in the stack frame architecture introduced in version 0.4.0, improving code organization and performance.
  • A problem in the parser example has been fixed. BASIC, amikor a felhasználói funkciók (például FNA(X)) leálltak az értékelés során. Ezt a 0.4.0-ás verzióban bekövetkezett változások okozták, amelyek visszaállították a lug::environmentot a beágyazott szintaktikai elemzési műveletek során. Egy új lug::environment::should_reset_on_parse funkciót adtunk hozzá, amely finom kontrollt biztosít ennek a viselkedésnek a felett, lehetővé téve a környezet megőrzését a beágyazott elemzési műveletek során, amikor ez szükséges.
  • Összetett példaprogram-tesztelő infrastruktúrát adtunk hozzá.
  • Átszerveztük az include könyvtár hierarchiáját.
  • A szélesebb körű kompatibilitás érdekében a GitHub CI-hez támogatás került hozzáadásra további fordítókhoz (GCC 9/10/11/12, Clang 14/15/16/17).
  • A GitHub CI-hez Clang és MSVC statikus elemzők kerültek hozzáadásra.
  • A GitHub CI-hez Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) és Memory Sanitizer (MSan) került hozzáadásra.
  • A GitHub CI-hez clang-tidy integrációt adtunk hozzá.
  • A GitHub CI-ben megszüntettük az Ubuntu 20.04 használatát.

Forrás: linux.org.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster