JavaScript に基づいたカレル ロボット (ウィキペディア) のような小さなロボットを作成しました。
ロボットは、「前進」、「右折」などの簡単なコマンドで制御できます。
ユーザーは、javascript プログラムを記述してロボットを制御し、javascript の「eval()」関数を介してロボットが動くようにすることができます。
問題は、ロボットが何をしているかを確認し、エディターで現在のコード行を強調表示できるように、ロボットをゆっくりと動かしたいということです。
現在の方法: 解析
現時点では、テキストエリアの各行を解析し、window.setTimeout で次々に実行されるアクションのスタックを構築することで、これを (オフライン バージョンで) 解決しました。しかし、これにはもちろん制限があります。なぜなら、小さな JavaScript 言語構造ごとに解析コードを書かなければならず、これは多くの作業とエラーが発生しやすいからです。
これに関するいくつかの追加情報:
解析バージョン: http://abi-physik.de/_niki2/niki.php
バージョン js コードの解析: http://abi-physik.de/_niki2/js/niki.js
重要な関数はスクリプトの最後にあります: run(), execute()
現在、ユーザー スクリプトを 1 行ずつ解析し、アクションをスタックに追加しています。パーサーが「if」に遭遇すると、新しいスタックを開始し、そのスタックにすべてのアクションを追加します。パーサーが "}" に遭遇すると、"if" スタックを閉じ、ベース スタックにアクションを追加し続けます。
これを改善するアイデアはありますか?