いいタイトルが思いつかなくてすみません。
問題は次のとおりです。
当社のお客様のために、「シナリオ」の構築に使用できるグラフィカル デザイナーを (より大きなアプリケーションの一部として) 作成しました。
これらのシナリオは、「コマンド」で構成される「コンポジット」で構成されています。これらのコマンド オブジェクトはすべて CommandBase から派生し、ICompilable というインターフェイスを実装します。
シナリオ クラスは ICompilable も実装します。コマンドで Compile() が呼び出されると、バイトの配列が返され、それを目的のデバイスに送信できます (そのハードウェアに関する多くの情報を開示することはできません。申し訳ありません)。
アイデアを与えるために:
var scenario = new Scenario();
scenario.Add(new DelayCommand(1));
scenario.Add(new CountWithValueCommand(1,ActionEnum.Add,1));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new WaitCommand(3));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new SkipIfCommand(1,OperatorEnum.SmallerThan,10));
scenario.Add(new JumpCommand(2));
byte[] compiledData = scenario.Compile();
グラフィカル デザイナーは、これらすべてをユーザーから抽象化し、ユーザー (または彼女) が単純にコンポジットをデザイナー サーフェスにドラッグ アンド ドロップできるようにします。(コンポジットはコマンドをグループ化できるため、タスクを返すためのビルディング ブロックを提供できます)
最近、私たちの顧客が私たちのところに来て、「デザイナーは本当にクールですが、ある種のプログラミング言語、単純なものを使いたいと思っている人が何人かいます」と言いました。
(もちろん彼らにとっては簡単です)
さまざまなコマンドを呼び出したり、SkipIfCommand をより適切な構造に置き換えたりできる単純な言語を提供したいと考えています。
どこから始めればよいのか、どのような選択肢があるのかわかりません (現在持っているものを壊さずに)
Python などの言語を埋め込んでいる人や、独自の言語でパーサーを書いている人などについて聞いたことがあります...
助言がありますか?
PS: ユーザーはコンポジットのみを使用し、コマンドを使用することはありません。コンポジットは実行時に (グラフィカル デザイナーと共に) 動的に読み込まれ、別のアセンブリでサード パーティによって提供される場合があります。