私の目標は自分のアプリケーション用の DSL を開発することですが、ユーザーがDSL が実行されている基盤となる言語について何も知らなくても、DSL にブレークポイントを設定できるようにしたいと考えています。 DSL 関連の構文、スタック、ウォッチ変数など。
どうすればこれを達成できますか?
私の目標は自分のアプリケーション用の DSL を開発することですが、ユーザーがDSL が実行されている基盤となる言語について何も知らなくても、DSL にブレークポイントを設定できるようにしたいと考えています。 DSL 関連の構文、スタック、ウォッチ変数など。
どうすればこれを達成できますか?
ターゲットプラットフォームによって異なります。たとえば、.NET上にDSLコンパイラを実装している場合、デバッグ情報(変数名、式やステートメントのソースコードの場所など)でバイトコードに注釈を付けるのは簡単です。
言語にVisualStudio拡張機能も提供している場合は、DSLコードの編集とデバッグの両方にロイヤリティフリーのMSVS分離シェルを再利用できます。
JVMでもほぼ同じアプローチが可能です(デバッグフロントエンドとしてEclipseまたはNetbeansを使用できます)。
ネイティブコードの生成はもう少し複雑ですが、line
プラグマを詰めたCコードを生成するなど、いくつかの簡単なことを行うことは可能です。
基本的に、ブレークポイントの組み込み機能を備えた DSL のコードを生成する必要があります。それぞれに、内部状態変数を監視するための組み込み機能があります。次に、デバッガーは、DSL 内の場所をデバッグ ブレークポイントにマップする方法を認識し、ブレークポイントごとにオブザーバーを呼び出すだけです。(オブザーバーに変数名などの名前がある場合は、ユーザーが呼び出すものを選択できるようにすることができます)。