記事"数式の計算(第1部)再帰下降パーサ"についてのディスカッション

 

新しい記事 数式の計算(第1部)再帰下降パーサ はパブリッシュされました:

本稿では、数式の解析と計算の基本原則について説明します。事前に構築された構文木に基づいて、インタプリタモードと高速計算モードで動作する再帰下降パーサを実装します。

取引タスクを自動化する場合、実行段階で計算アルゴリズムの柔軟性を提供する必要がある場合があります。たとえば、プログラムをクローズド(コンパイル済み)モードで微調整する場合、さまざまな可能な組み合わせから選択した目的の関数タイプを実装できます。特に、これはエキスパートアドバイザーを最適化するとき、または指標のプロトタイプをすばやく評価するときに役立ちます。また、ユーザは、ダイアログボックスでパラメータを変更するだけでなく、計算式を変更することもできるため、MQLプログラムコードを変更せずに、テキスト表現から算術式を計算する必要があります。

このタスクは、さまざまなパーサを使用して、その場で数式を解釈し、構文木に「コンパイル」し、いわゆるバイトコード(計算命令のシーケンス)を生成し、結果を計算するためにさらに実行することで解決できます。本稿では、いくつかのタイプのパーサと式の計算方法について検討します。

問題の定式化

本稿での算術式は、関連するアクションを説明するデータ項目と演算子の1行のシーケンスです。データ項目は数値と名前付き変数です。変数値は、外部から、つまり式ではなく、特別なパーサ属性を使用して設定および編集できます。つまり、中間結果を格納するための代入演算子(=)はありません。以下は、サポートされている演算子を計算の優先順位の高い順に示します。

  • !、- 、+ — 単項論理否定、マイナスおよびプラス
  • () — 括弧でグループ化
  • *、/、% — 乗算、除算、除算の余り
  • +, - — 加算と減算
  • >, <, >=, <= — より多い/より少ないの比較
  • ==, != — 平等/不平等の比較
  • &&, || — 論理ANDおよびOR(優先順位は同じであるため、括弧を使用する必要があることに注意してください)
  • ?: — 条件に従って計算を分岐できる三項演算子(条件演算子)

また、合計25の式でMQL標準数学関数を使用できるようにします。それらの1つは、冪演算のためのpow関数です。このため、演算子のリストには冪乗演算子(^)がありません。さらに、演算子「^」は整数の冪乗のみをサポートしますが、この関数にはそのような制限はありません。「^」を他の考慮される演算子と区別するもう1つの特定の機能があります。

作者: Stanislav Korotky