記事"MQLによるMQLの構文解析"についてのディスカッション

 

新しい記事 MQLによるMQLの構文解析 はパブリッシュされました:

本稿では、MQLに基づいたソースコードの解析に使用されるプリプロセッサ、スキャナ、パーサについて説明します。MQLの実装が添付されています。

プログラミングとは基本的に、汎用または特殊目的の言語を使用して一部のプロセスを形式化し自動化することです。MetaTrader取引プラットフォームでは、トレーダーのさまざまな問題を解決するために、組み込みMQL言語を使用したプログラミングを適用することができます。通常、コーディングのプロセスは、ソースコードで指定された規則に従ったアプリケーションデータの分析および処理に基づいています。しかしながら、ソースコード自体を分析し処理する必要性が時々生じます。下記は例です。

最も一貫性があり一般的なタスクの1つは、ソースコードベースでのコンテキスト検索とセマンティック検索です。確かに、ソースコード内の文字列は通常のテキストのように検索できますが、この場合、求められている意味が失われてしまいます。結局のところ、ソースコードの場合、それぞれの特定の場合での部分文字列の使用の詳細を区別することが望ましいものです。プログラマが「notification」のように特定の変数が使用されている場所を見つけたい場合、名前による単純検索では、この文字列のメソッド名やリテラルなどの他の値、またはコメント内での使用が必要以上に多く返されることがあります。

大規模プロジェクトでは原則としてコード構造、依存関係、クラス階層の特定がより複雑でありより求められています。それはコードのリファクタリングや改善およびコード生成を可能にするメタプログラミングと密接に関係しています。MetaEditorには、コード生成、特にウィザードを使用してエキスパートアドバイザーのソースコード作成したりソースコードでヘッダファイルを作成したりする機会がありますが、このテクノロジの可能性ははるかに強力なものです。

コード構造分析を使用すると、さまざまな品質指標および統計情報を計算したり、コンパイラでは検出できないランタイムエラーの典型的な原因を特定したりできます。実際、言うまでもなく、コンパイラ自体はソースコードを分析する最初のツールであり、さまざまな種類の警告を返します。しかし、すべての潜在的なエラーの確認は通常コンパイラには組み込まれていません。このタスクは大きすぎるので、通常それは別のプログラムに割り当てられています。

さらに、ソースコードの解析は、スタイル設定(フォーマット)と難読化に使用されます。

MQL構文解析クラスのUML図

作者: Stanislav Korotky

 
トピックは複雑で興味深い。エディターを作る?AI?
 

この論文は質的にも非常によく書けている。辞書的構文解析に続くものは「意味論的」構文解析であると考えるのが自然である。そして、意味的構文解析の後には、AIの誕生が待っている。:)

ZY、基本的な知的機能を備えた人工精神だけが残される。

 

作者への真面目な質問:

私は独自のマークアップ言語を持っています。この言語にはルールがあり、キーワードと呼ばれる数字で構成されています。

キーワードのほとんどは、グループ名や要素名などの文字列と一緒になっており、これらの文字列「トークン」を分析する必要はありません。MQLコンパイラーは、キーワードの定義がファイル内で連結されているため、キーワード名のエラーを検出する。

しかし、ユーザーはマークアップ・コードをコンパイルする際に言語規則に違反する可能性があります。コンパイル後のコードを文法ではなくルールに 関連するエラーについてチェックする必要があります。

この記事で説明されている構文解析のコンセプトに基づいてそれを行うことは可能でしょうか、それとも別のメカニズムを作る必要があるのでしょうか?

あなたの経験を頼りにしています。

ありがとうございました。

 
Реter Konow:

...

これは論文で概説されている構文解析のコンセプトに基づいて行うことができるのでしょうか、それとも別のメカニズムが必要なのでしょうか?

...

私自身は、次のような解決策を選択した:コード(基本的には値の配列)をスキャンしてキーワード(コマンド)のシーケンスに違反がないか調べ、それに関するメッセージをログに出力する。原理的には簡単で、条件、フィルター、フラグのセットを通して一連の数値を監視できるからだ。

字句解析、文法解析、構文解析は、コマンドとは異なり、人間の言葉には数値に相当するものがないため、はるかに難しい。言葉には数字を持たない性質があり、その性質は多岐にわたる。構文解析では、単語だけでなく、句や句読点などのさまざまな性質を扱う必要がある。そして何よりも、テキストに埋め込まれた意味(文脈)を「浮遊」させる。この意味の抽出は、将来的には意味解析の仕事になるかもしれない(存在するかどうかはわからないが)。

私の仕事では、一連のコマンドの単純な制御で十分である。

 
いずれ、有名な静的アナライザーを追加する予定です。

私たちはPVS Studioを使っています。
 

おそらくこの方法を使えば、マーケット用のmq4->mq5コンバーターを書くことができるだろう:

  • ex5-advisorが起動し、mq4-codeが供給される。
  • 出力はmq5コードである。
マーケットにはそのような試みがあるが、弱い。

 

更新されたソースを掲載。

最新ビルドでのコンパイラビリティを確保。

いくつかの見つけにくいバグを修正。

ファイル:
 
Stanislav Korotky:

更新したソースコードを掲載する。

記事中の
 
クールだね。リファクタリングの例があるといいね。
 

こんにちは、私は比較的初心者です。

記事を読んで、RESULTはウィザードによって生成されたコードを検索するための検索ツールであると仮定しました。

zipファイルをダウンロードしました。スクリプトmql.mq5をインストールし、エラーなしでコンパイルしました。

mql.ex5を実行しても結果は表示されない。

私は学習モードです。ウィザードを使用してコードベースからコードを使用し、分析、修正して使用可能なEAを得ることができるようにしたいのです。

何か手助けがあればありがたいです。

ありがとうございます。