1

この論文: http://www.codeproject.com/Articles/345888/How-to-write-a-simple-interpreter-in-JavaScriptは、エンジニアリングの解析と命令の記述に関して非常に役立ちましたが、その方法については説明していません。ループとifを書く。それについての論文をいくつか教えてもらえますか?事前定義された関数などを追加するのは簡単ですが、特に私の BASIC 方言は必須の行番号、変数を設定するために LET を使用する必要性など、非常に固定された構文 (つまり、命令を区切るための ':' はなく、 1 行に 1 つの命令、パラメーターの区切りに空白を使用できないため、10 LET variable,value は有効ですが、10 LET variable, value は無効です)?

もう一度考えてみると、ifs は簡単かもしれませんが、for..next ループの実行方法にはまだ問題があります (私のインタープリターは whiles/do..whiles を使用せず、oldschool goto/gosubs のみを使用します)。

4

1 に答える 1

0

を実装するには、 の変数 (通常はプログラム カウンターと呼ばれる)GOTOを変更する方法が必要です。1 つの方法は、単純な値ではなくオブジェクトを返すように変更することです。ievaluate()parseNode

// ...evaluate()...
var result = parseNode(parseTree[i]);
if (typeof result.newI !== undefined) {
    i = result.newI;
}
if (typeof result.value !== "undefined") {
    output += value + "\n";
}
// ...parseNode....
else if (node.type === "goto") {
    return {newI : node.value};
}

実装IFは、次のように簡単になります (条件が にある場合node.args):

else if (node.type === "if") {
    if (parseNode(node.args).value != 0) {
        return parseNode(node.value);
    }
}

これがウェルごとに複数のステートメントを実装しているかどうかはわかりIFませんが、方言もそうではありません。

于 2012-07-06T09:26:31.517 に答える