Diskussion zum Artikel "MQL-Parsing mit Hilfe von MQL"

 

Neuer Artikel MQL-Parsing mit Hilfe von MQL :

Der Artikel beschreibt einen Präprozessor, einen Scanner und einen Parser, die beim Parsen der MQL-basierten Quellcodes verwendet werden sollten. Die MQL-Implementierung ist beigefügt.

Programmierung ist im Wesentlichen die Formalisierung und Automatisierung einiger Prozesse mit Hilfe von Mehrzweck- oder Spezialsprachen. Die Handelsplattform MetaTrader ermöglicht die Anwendung der Programmierung zur Lösung einer Vielzahl von Problemen eines Händlers unter Verwendung der integrierten MQL-Sprache. In der Regel basiert der Codierungsprozess auf der Analyse und Verarbeitung von Anwendungsdaten nach den Regeln des Quellcodes. Manchmal ergibt sich jedoch die Notwendigkeit, die Quellcodes selbst zu analysieren und zu verarbeiten. Hier sind einige Beispiele.

Eine der konsistentesten und beliebtesten Aufgaben ist die kontextuelle und semantische Suche in der Quellcodebasis. Sicherlich können Sie in einem Quellcode wie in einem normalen Text nach Zeichenketten suchen, aber die Semantik des Gesuchten geht verloren. Schließlich ist es im Falle von Quellcodes wünschenswert, zwischen den Besonderheiten der Verwendung der Teilzeichenkette in jedem konkreten Fall zu unterscheiden. Wenn ein Programmierer herausfinden möchte, wo eine bestimmte Variable verwendet wird, wie z.B. "notification", dann kann eine einfache Suche nach ihrem Namen viel mehr als nötig zurückgeben, wenn die Zeichenkette in anderen Werten, wie beispielsweise einem Methodennamen oder einem Literal, oder in Kommentaren vorkommt.

Komplizierter und in der Regel bei größeren Projekten gefragt ist die Aufgabe, Codestruktur, Abhängigkeiten und Klassenhierarchie zu identifizieren. Es ist eng mit der Metaprogrammierung verbunden, die es ermöglicht, Code-Überarbeitungen/-Verbesserung und die Codegenerierung durchzuführen. Erinnern Sie sich daran, dass der MetaEditor einige Möglichkeiten bietet, Code zu generieren, insbesondere die Quellcodes von Expert Advisors mit dem Wizard zu erstellen oder eine Header-Datei aus dem Quellcode zu erstellen. Die Potenziale dieser Technologie sind jedoch viel größer.

Die Code-Strukturanalyse ermöglicht die Berechnung verschiedener Qualitätsmetriken und Statistiken sowie das Auffinden der typischen Quellen von Laufzeitfehlern, die der Compiler nicht erkennen kann. Tatsächlich ist der Compiler selbst natürlich das erste Werkzeug zur Analyse eines Quellcodes und gibt viele unterschiedliche Warnungen zurück; die Überprüfung auf alle möglichen Fehler ist jedoch in der Regel nicht eingebaut — diese Aufgabe ist zu umfangreich, so dass sie normalerweise separaten Programmen zugeordnet ist.

Darüber hinaus wird das Parsen von Quellcodes für das Styling (Formatierung) und die Verschleierung (Verwirrung) verwendet.

UML-Diagram der Klassen des MQL Parsings

Autor: Stanislav Korotky

 
Das Thema ist komplex und interessant, aber wie könnte die praktische Anwendung aussehen? Einen Editor erstellen? EINE KI?
 

Der Artikel ist sehr gut geschrieben, qualitativ. Es ist logisch anzunehmen, dass die Fortsetzung des lexikalischen Parsings das "semantische" Parsing ist, über das ich vorschlage, den nächsten Artikel zu schreiben. Und nach dem semantischen Parsing sind wir nur noch einen Steinwurf von der Schaffung einer KI entfernt. :)

ZY: Es wird nur noch eine künstliche Psyche mit grundlegenden intellektuellen Funktionen zu schreiben sein.

 

Ernste Frage an den Autor:

Ich habe meine eigene Auszeichnungssprache. Sie hat einen Satz von Regeln und besteht aus Schlüsselwörtern, die Zahlen sind.

Die meisten Schlüsselwörter sind mit String-Wörtern verschachtelt - Namen von Gruppen oder Elementen, und es besteht keine Notwendigkeit, diese String-"Token" zu analysieren. Der MQL-Compiler fängt Fehler in den Namen von Schlüsselwörtern auf, weil ihre Defines in der Datei verbunden sind.

Allerdings kann der Benutzer beim Kompilieren des Markup-Codes gegen die Sprachregeln verstoßen. Es ist notwendig, den Code nach der Kompilierung auf Fehler im Zusammenhang mit den Regeln und nicht mit der Grammatik zu überprüfen .

Ist es möglich, dies auf der Grundlage des im Artikel beschriebenen Parsing-Konzepts zu tun, oder ist es notwendig, einen anderen Mechanismus zu schaffen?

Ich verlasse mich auf Ihre Erfahrung.

Ich danke Ihnen.

 
Реter Konow:

...

Kann dies auf der Grundlage des in dem Papier beschriebenen Parsing-Konzepts geschehen, oder ist ein anderer Mechanismus erforderlich?

...

Ich selbst habe mich für die folgende Lösung entschieden: Scannen des Codes (im Wesentlichen ein Array von Werten) auf Verstöße gegen die Abfolge von Schlüsselwörtern (Befehlen) und Ausgabe von Meldungen darüber in das Protokoll. Im Prinzip ist das ganz einfach, denn man kann die Zahlenfolge durch eine Reihe von Bedingungen, Filtern und Flags überwachen.

Das lexikalische, grammatikalische und syntaktische Parsing ist viel schwieriger, da menschliche Wörter im Gegensatz zu Befehlen keine numerische Entsprechung haben. Wörter haben Eigenschaften, die keine Zahl haben, und diese Eigenschaften sind zahlreich. Bei der lexikalischen Analyse müssen nicht nur die Eigenschaften von Wörtern, sondern auch die von Satzteilen oder Interpunktion berücksichtigt werden. Und über all dem "schwebt" die in den Text eingebettete Bedeutung (Kontext), deren Extraktion in Zukunft vielleicht die Aufgabe des semantischen Parsings sein wird (ich bin nicht sicher, ob es das gibt).

Für meine Aufgaben reicht eine einfache Kontrolle der Befehlsfolge aus.

 
Mit der Zeit werden wir versuchen, einige bekannte statische Analysatoren hinzuzufügen.

Wir selbst verwenden PVS Studio
 

Wahrscheinlich ist es mit dieser Methode möglich, einen mq4->mq5-Konverter für den Markt zu schreiben:

  • Es wird ein ex5-Advisor gestartet, der mit mq4-Code gefüttert wird.
  • Die Ausgabe ist mq5-Code.
Es gibt solche Versuche auf dem Markt, aber sie sind schwach.

 

Ich veröffentliche aktualisierte Quellen.

Sicherstellung der Kompilierbarkeit in den neuesten Builds.

Mehrere schwer zu findende Fehler behoben.

Dateien:
 
Stanislav Korotky:

Ich poste den aktualisierten Quellcode.

Ersetzt im Artikel
 
Das ist gut. Ein Beispiel für Refactoring wäre schön.
 

Hallo, ich bin ein relativer Neuling hier.

Nachdem ich den Artikel gelesen hatte, ging ich davon aus, dass das RESULT ein Suchwerkzeug sein würde, um den vom Assistenten erzeugten Code nachzuschlagen.

Habe die Zip-Datei heruntergeladen. Installierte das Skript mql.mq5 und kompilierte es ohne Fehler.

Wenn ich mql.ex5 ausführe, erscheint kein Ergebnis auf dem Bildschirm.

Ich befinde mich im Lernmodus. Ich möchte den Assistenten verwenden können, um Code aus der Codebasis zu verwenden und dann zu analysieren und zu modifizieren, um einen brauchbaren EA zu erhalten.

Für jede Hilfe wäre ich dankbar.

Vielen Dank