※ ChatGPTを利用し、要約された質問です(原文:C#で独自のスクリプトを利用するには?)
C#で独自のスクリプトを利用するには?
C#に関することで分らないことがあり質問させて頂きます。
教えて頂きたいことが数点あるのですが、そのうちの1つをお尋ねします。
OmegaChartという株価チャート(フリーソフト)を表示させるソフトがあります。
数値をグラフ表示させるようなものとイメージして頂ければ宜しいかと思います。
ソースは公開しているので、そちらをトレースしながら、見てはいるのですが私の理解力が足りず、
どのように処理しているのかが全然理解できません。
このソフトの何を理解したいかと言うと、このソフト中で用意されているオリジナルのスクリプト(関数)を
使って、式を入力すると計算結果が出力できる機能があります。
この機能をどのように処理すれば、再現することができるのか?というのが、今回の質問です。
Excelでも式を入力すると、計算結果が出ますが、それと同じもの考えて頂ければ宜しいかと思います。
ちなみに、OmegaChartでのスクリプトとしては、
合計算出 :Sum(数値1,数値2,・・・数値n) 平均値算出:Avg(数値1,数値2,・・・数値n)
特定の数値を数個取得
結果値:[数値1,数値2,・・・数値n] ← Each(取得する数値の数,取得する数値の対象)など
例としては、 Avg(each(5,とある種類の数値))を入力したとすると、
1. each(5,とある種類の数値)にて、5つの数値 → 結果値:数値配列[5]
2. Avg(数値配列[5])にて、配列の数値の平均値を求める
といった具合になります。
OmegaChartのソースでは、
初期処理の段階で、スクリプト名とソース内部で直接処理する関数とを関連付けしている処理として
ハッシュ配列で配列の添え字に『スクリプト名』を、配列の中に呼び出される実際の処理関数を
デリゲートを使って登録しているものかと思われます。
(この表現には知識が浅いので、正確なものかは少し自信がありません。)
あとは、式を入力して、ボタンが押された段階で、式を解法する処理に入り、一つずつ関数処理を呼び出す。
アルゴリズムの解説で逆ポーランド記法というもので、数値計算式を入力されたものを処理するというのは、
いくつかのサイトで拝見しましたが、残念ながら数値そのものを使った式を処理されている例ばかりで、
スクリプトの式を解析→分解→処理するといったサンプル・解説されているサイトを見つける事ができません。
・スクリプトを使った処理
・スクリプト関数や引数などをどのように保持すれば、処理することが可能なのか?
・関数の引数に別の関数を入れても処理することができるのはなぜ?
( 例:Avg(Each(5,とある種類の数値)) )
・この処理を理解するのに必要なこととは? また関連するアルゴリズムは?
ちなみに、理想としてC#2005くらいのC#の言語機能で再現できる方法が分ると有難いです。
理由としては、冒頭でのOmegaChartのソース公開もC#2005くらいからソースを開いて見ることが
できるためですが、それが困難だというのであれば、C#で扱える範囲でも構いません。
恐らく、こちらのサイトにて回答するには限界があるでしょうから、もしサンプル・解説されているサイトなど
をご存知の方がおられましたら、ぜひ教えて頂けると大変助かります。
厄介な質問でしょうが、何卒宜しくお願い致します。
この質問文で言葉足りない場合には、改めて追記致します。
お礼
ご回答頂き、ありがとうございます。 理論という難しい話になってしまいますかね。 質問文にて名前を挙げた「OmegaChart」も”grammatica-1.4.dll” というライブラリーを利用して構文を解析されているようです。 初心者に分りやすい解説・リファレンスが見当たりません。 構文チェックすることができるライブラリーがいくつかあるようですね。 そして、この構文解析をしてくれるライブラリーは他にもあるみたいで、 私のような質問をされているところへ回答されている中で、”yacc”という 名を見かけました。 これが現時点では、最も利用されている方が多いのでしょうか。 日本のサイトで解説されているところも多いように感じました。 普段何気なく、使っているスクリプトも自分で再現しようとすると、 これほど難しいものかと改めて思わされてしまいます。