Lug 0.5.0

Lug 0.5.0

Op 19 maart werd de C++ bibliotheek uitgebracht Lug, die een ingebouwde onderwerpgerichte taal voor het uitdrukken van syntactische analyzers in de vorm van uitgebreide grammatica's van syntactische uitdrukkingen, en verspreid onder de MIT-licentie.

Mogelijkheden van de bibliotheek:

  • Natuurlijke syntaxis die lijkt op de talen van externe parsergeneratoren, met ondersteuning voor attributen en semantische acties.
  • De mogelijkheid om te werken met contextafhankelijke grammatica's met symbolentabellen, voorwaarden en syntactische predicaten.
  • Gegenereerde parsers worden gecompileerd naar bytecode en uitgevoerd in een syntactische analyse virtuele machine.
  • Duidelijke scheiding van syntactische en lexicale regels met de mogelijkheid om impliciete spatie-inspringen aan te passen.
  • Ondersteuning voor directe en indirecte linkerrecursie, met prioriteitsniveaus voor het scheiden van deeluitdrukkingen met gemengde linker- en rechterrecursie.
  • Volledige ondersteuning voor het parseren van tekst in UTF-8, inclusief niveau 1 en gedeeltelijke overeenstemming met niveau 2 van de technische standaard UTS #18 Unicode Reguliere Expressies.
  • Foutafhandeling en herstel met behulp van gemarkeerde fouten, herstelregels en foutafhandelingsmechanismen.
  • Automatische tracking van regel- en kolomnummers, aanpasbare breedte en uitlijning van tabs.
  • Header-only bibliotheek, die alleen gebruik maakt van de standaardbibliotheek en mogelijkheden van de C++17-standaard. Toekomstige compatibiliteit met de standaarden C++20 en C++23 is perspectief.
  • Relatief kleine bibliotheek, gericht op het behouden van het totale aantal regels in alle headerbestanden op minder dan 6000 regels beknopte code.

Wijzigingenlijst:

  • Collection- en objectattributdirectieven zijn geĆÆmplementeerd. De nieuwe directive collect<C>[e] syntheseert een reeks of associatieve container van type C, bestaande uit elementen verzameld uit geĆ«rfde of gesynthetiseerde attributen in de expressie e. Evenzo zijn er nieuwe directieven synthesize<C,A…>[e], synthesize_shared<C,A…>[e] en synthesize_unique<C,A…>[e] voor de synthese van objecten, gedeelde pointers en unieke pointers, respectievelijk, opgebouwd uit componentattributen in de expressie e.
  • De sintaxis_collect-directive is geĆÆmplementeerd, die de collect- en synthesize-directives combineert om de leesbaarheid van de code te verbeteren en het aantal sjablonen te verminderen bij het opbouwen van complexe datastructuren uit geparseerde elementen. Dit is vooral nuttig voor het creĆ«ren van geneste collecties, zoals arrays van objecten of associatieve containers met complexe types.
  • De sjabloonklasse lug::recursive_wrapper is toegevoegd voor het omgaan met cyclische afhankelijkheden in abstracte syntaxisbomen, met name die gebruik maken van std::variant.
  • Ondersteuning voor Unicode 16.0.0 is geĆÆmplementeerd en ondersteuning voor build-tools is toegevoegd in CMakeLists.txt.
  • De bereik- en ASCII-teken set toewijzing is geoptimaliseerd, wat resulteert in een significante prestatieverbetering bij het uitvoeren van veelvoorkomende tekstverwerkingsoperaties. Er zijn gespecialiseerde snelle methoden toegevoegd voor de verwerking van alleen ASCII-tekens, die aanzienlijk sneller zijn dan de Unicode-verwerkingscode.
  • De opcodes test zijn geĆÆmplementeerd voor foutoptimalisatie en de opcodes repeat voor het optimaliseren van het overslaan van spaties. Deze optimalisaties zullen volledig worden opgenomen in de volgende release na de geplande transformaties van de expressiebomen.
  • De verwerking van invoerbronnen is verbeterd met verbeterde buffering en foutmeldingen voor std::istream, en de ondersteuning voor de interactieve modus is verbeterd, die regel-voor-regel invoer correct verwerkt voor terminalsessies of voor lijngeoriĆ«nteerde grammatica's.
  • De ondersteuning voor std::istream is verplaatst naar een apart headerbestand <lug/iostream.hpp>. Dit verkort de compilatietijd en minimaliseert de afhankelijkheden van headers voor projecten die de functionaliteit van stroominvoer/uitvoer niet nodig hebben.
  • De logica voor het vastzetten van de parser is herzien door instructies in lug::basic_parser in te lijnen voor een betere afstemming op de wijzigingen in de stackframe-architectuur die in versie 0.4.0 zijn gepresenteerd, wat de organisatie van de code en de prestaties verbeterde.
  • Een probleem in het parser voorbeeld is verholpen. BASIC, wanneer gebruikersfuncties (zoals FNA(X)) tijdens de evaluatie beĆ«indigd werden. Dit werd veroorzaakt door wijzigingen in versie 0.4.0, die lug::environment resetten tijdens geneste parser-operaties. Een nieuwe functie lug::environment::should_reset_on_parse is toegevoegd om fijne controle over dit gedrag te waarborgen, zodat de omgeving kan worden behouden tijdens geneste parsing operaties, wanneer dat nodig is.
  • Een uitgebreide testinfrastructuur voor voorbeeldprogramma's is toegevoegd.
  • De mappenstructuur van include is opnieuw opgebouwd.
  • Ter verbetering van de compatibiliteit in GitHub CI is ondersteuning voor aanvullende compilers toegevoegd (GCC 9/10/11/12, Clang 14/15/16/17).
  • Clang en MSVC statische analyzers zijn toegevoegd aan GitHub CI.
  • Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) en Memory Sanitizer (MSan) zijn toegevoegd aan GitHub CI.
  • Integratie met clang-tidy is toegevoegd aan GitHub CI.
  • Het gebruik van Ubuntu 20.04 is verwijderd uit GitHub CI.

Bron: linux.org.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster