Intent ルールの評価機能は、スタックベースの仮想マシンです。ルールベースのモデリングで使用される特定の演算を実行します。詳細な命令が含まれる Intent 言語のコンパイル バージョンを実行します。この命令は、アセンブリ言語と外観が似ていて、人間が読み取れるようには設計されていません。
Intent デバッガ機能は、debug_break と呼ばれる特定の高度な命令を実行したときに、呼び出されます。この命令を実行するまで、通常の Intent の評価には差がなく、パフォーマンスへの影響もありません。
デバッガは、_debug という特別なステートメントを使用して、呼び出すことができます。ルール ボディに _debug ステートメントを記述すると、そのルールのその場所で debug_break 命令がコンパイルされます。評価中にこの命令を実行した場合は、デバッガのダイアログ ボックスが表示され、その時点で評価機能が中断されます。_debug ステートメントは、これ以外の影響を与えません。システムのいずれの部分も変更されません。
Intent デバッガは、"ソース" デバッガではありません。命令は、ローカル変数の割り当て、初期化、割当解除、タイプチェックの実行、ルール値の取得や設定などのソース行にマップされません。Parameter や Lookup などの特定のフラグを記述することで含まれる命令もあります。言語のコンパイル バージョンを完全にドキュメント化する予定はありません。
各ルールは、ヘッダ、ボディ、フッタの 3 つの部品で構成されます。ヘッダ部分とフッタ部分は合わせて使用して、フラグや初期化を処理し、ルールの戻り値を返します。ここでは、ルールのボディは push_stack 0 0 命令と pop_stack 0 0 命令の間にあります。debug_break 命令と push_statement_marker 命令(ハウスキーピングのために debug_break の後に常に配置される命令)です。
bound? 命令は、このルールが既に評価され保存されているかどうかを判定します。Uncached 以外のルールでは、このチェックが最初のステートメントになります。結果が no の場合は評価を続行しますが、yes の場合は保存されている "slot" から値を取得し、end_rule 命令にジャンプします。47 という値は、実際にジャンプするバイト数です。各命令で 1 ~ 9 バイト使用します。
開始時、評価によって、戻り変数にルールと同じ名前(この場合は文字列)が設定されます。命令により、(データ スタック上の) 1 つの要素のローカル変数フレームが設定されます。設定される値は、空の文字列(文字列タイプの既定)です。この状態は、debug_break がヒットしたときに表示されます。データ スタックに、戻り変数の名前と値が表示されます。
これで、評価を確認できるようになります。評価で、debug_break 命令を早めに取得する方法はありません。これらのステートメントをステップ実行する方法を後述します。
[ステップ]をクリックすると、評価機能によって 1 ステップ取得され、データ スタックにステートメント マーカーがプッシュされます。

データ スタックの[名前]列に <no symbol> と表示されます。スタック上のすべてのデータに名前があるわけではありません。ローカル変数データのみが名前を持ちます。
pop_stack 0 0 命令をステップ実行しても、変化はありません。実際にこの場合は、push_stack 0 0 も pop_stack 0 0 も何も実行しません。最適化によって両方とも削除される可能性があります。ポップによって、ステートメント マーカーが削除されます。次のいくつかの命令で、ルールを閉じます。まず、get_var でデータ スタックから debugHere 値を取得します。次に、スタックをポップして一番上の値(名前なし)を破棄し、String かどうかチェックし、slot の値として設定し、返します。
end_rule 命令をステップ実行すると、値が返され、MinHost プロパティに結果が表示されます。
いつでも、評価フレームをクリックすると、そのルールの命令と実行ステータスを確認することができます。