Lug 0.5.0

Lug 0.5.0

Am 19. März wurde die C++-Bibliothek veröffentlicht Lug, die eine eingebettete domänenspezifische Sprache zur Darstellung von Parsern in Form von erweiterten Grammatiken syntaktischer Ausdrücke, und die unter der MIT-Lizenz verbreitet wird.

Funktionen der Bibliothek:

  • Natürliches Syntax, das an externe Parser-Generatoren erinnert, mit Unterstützung für Attribute und semantische Aktionen.
  • Möglichkeit, mit kontextabhängigen Grammatiken mit Symboltabellen, Bedingungen und syntaktischen Prädikaten zu arbeiten.
  • Generierte Parser werden in Bytecode kompiliert und in der Parser-Virtual Machine ausgeführt.
  • Deutliche Trennung von syntaktischen und lexikalischen Regeln mit der Möglichkeit, das implizite Überspringen von Leerzeichen anzupassen.
  • Unterstützung direkter und indirekter linker Rekursion mit Prioritätsstufen zur Abgrenzung von Teilausdrücken mit gemischter linker und rechter Rekursion.
  • Vollständige Unterstützung der Verarbeitung von Text im UTF-8-Format, einschließlich Level 1 und teilweiser Übereinstimmung mit Level 2 des technischen Standards UTS #18 Unicode Reguläre Ausdrücke.
  • Fehlerbehandlung und Wiederherstellung durch markierte Fehlschläge, Wiederherstellungsregeln und Fehlerbehandler.
  • Automatische Überwachung von Zeilen- und Spaltenzahlen, anpassbare Breite und Tabulatorausrichtung.
  • Header-only-Bibliothek, die nur die Standardbibliothek und die Funktionen des C++17-Standards verwendet. Zukünftig kompatibel mit den Standards C++20 und C++23.
  • Relativ geringe Größe der Bibliothek, mit dem Ziel, die Gesamtzahl der Zeilen in allen Header-Dateien unter 6000 Zeilen prägnanten Codes zu halten.

Änderungsprotokoll:

  • Sammlung der Direktiven und der Objektattribute wurden implementiert. Die neue Direktive collect<C>[e] synthetisiert eine Sequenz oder einen assoziativen Container vom Typ C, bestehend aus Elementen, die aus geerbten oder synthetisierten Attributen in der Ausdruck e gesammelt werden. Ebenso sind neue Direktiven wie synthesize<C,A…>[e], synthesize_shared<C,A…>[e] und synthesize_unique<C,A…>[e] für die Synthese von Objekten, gemeinsamen Zeigern und einzigartigen Zeigern mit Attributen aus Komponenten im Ausdruck e hinzugekommen.
  • Die Direktive synthesize_collect wurde implementiert, die die Direktiven collect und synthesize kombiniert, um die Lesbarkeit des Codes zu verbessern und die Anzahl der Vorlagen beim Aufbau komplexer Datenstrukturen aus analysierten Elementen zu reduzieren. Dies ist besonders nützlich für die Erstellung von verschachtelten Sammlungen, wie z. B. Arrays von Objekten oder assoziativen Containern mit komplexen Werttypen.
  • Die templatisierte Klasse lug::recursive_wrapper wurde hinzugefügt, um zyklische Abhängigkeiten in abstrakten Syntaxbäumen zu behandeln, insbesondere mit std::variant.
  • Die Unterstützung für den Unicode-Standard 16.0.0 wurde implementiert, sowie die Unterstützung für Build-Tools in CMakeLists.txt hinzugefügt.
  • Das Abgleichen von Bereichen und ASCII-Zeichensätzen wurde optimiert, was zu einer erheblichen Leistungssteigerung bei häufigen Textverarbeitungsoperationen führte. Es wurden spezialisierte Schnellmethoden für die Verarbeitung von ASCII-Zeichen hinzugefügt, die deutlich schneller sind als der Code für die Unicode-Verarbeitung.
  • Die Opcodes test zur Optimierung von Fehlern und die Opcodes repeat zur Optimierung des Überspringens von Leerzeichen wurden implementiert. Diese Optimierungen werden in der nächsten Version nach den geplanten Änderungen am Ausdrucksbaum vollständig aktiviert.
  • Die Verarbeitung von Eingabequellen wurde mit verbesserter Pufferung und Fehlerberichterstattung für std::istream optimiert, und die Unterstützung für den interaktiven Modus wurde verbessert, die die zeilenweise Eingabe für Terminalsitzungen oder linear orientierte Grammatiken korrekt behandelt.
  • Die Unterstützung für std::istream wurde in eine separate Header-Datei verschoben. Dies reduziert die Kompilierzeit und minimiert die Abhängigkeiten von Headern für Projekte, die keine Funktionsweise der Eingabe-/Ausgabeströme benötigen.
  • Die Logik des Parsers wurde durch das Inline-Programmieren von Anweisungen in lug::basic_parser überarbeitet, um besser an die Änderungen der Architektur des Stapelrahmens, die in Version 0.4.0 eingeführt wurden, angepasst zu werden, was die Codeorganisation und die Leistung verbesserte.
  • Ein Problem im Parserbeispiel wurde behoben. BASIC, wenn benutzerdefinierte Funktionen (z. B. FNA(X)) während der Auswertung abgeschlossen wurden. Dies wurde durch Änderungen in Version 0.4.0 verursacht, die lug::environment während verschachtelter Parsing-Operationen zurücksetzten. Eine neue Funktion lug::environment::should_reset_on_parse wurde hinzugefügt, um eine feinere Kontrolle über dieses Verhalten zu gewährleisten, sodass die Umgebung während verschachtelter Parsing-Operationen, wenn nötig, beibehalten werden kann.
  • Umfassende Testinfrastruktur für Programmbeispiele hinzugefügt.
  • Die Verzeichnisstruktur für include wurde neu organisiert.
  • Zur Gewährleistung einer breiteren Kompatibilität in GitHub CI wurde die Unterstützung zusätzlicher Compiler (GCC 9/10/11/12, Clang 14/15/16/17) hinzugefügt.
  • Statische Analyzer Clang und MSVC wurden zu GitHub CI hinzugefügt.
  • Address Sanitizer (ASan), Undefined Behavior Sanitizer (UBSan) und Memory Sanitizer (MSan) wurden zu GitHub CI hinzugefügt.
  • Die Integration von clang-tidy wurde zu GitHub CI hinzugefügt.
  • Die Verwendung von Ubuntu 20.04 wurde aus GitHub CI entfernt.

Quelle: linux.org.ru

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster