1

这篇论文:http ://www.codeproject.com/Articles/345888/How-to-write-a-simple-interpreter-in-JavaScript在工程解析和编写指令方面帮助了我很大,但是它没有解释如何编写循环和 ifs。你能给我指一些关于这方面的论文吗?虽然添加预定义函数等很容易,特别是因为我的 BASIC 方言将是非常老派的一种,带有强制行号、使用 LET 设置变量等的要求以及非常固定的语法(即没有':'来分隔指令,只有每行一条指令,参数分隔不允许空格,所以 10 LET 变量,值是有效的,但 10 LET 变量,值不是)?

再想一想,ifs 可能会很容易,但是如何执行 for..next 循环仍然存在问题(我的解释器不会使用 whiles/do..whiles,只有 oldschool gotos/gosubs)。

4

1 回答 1

0

要实现GOTO,您需要一种方法来修改. 中的i变量(通常称为程序计数器evaluate()。一种方法是修改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会更简单,如下所示(如果条件为 in node.args):

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

我不确定这是否每IF口井都实现了多个语句,但您的方言也没有。

于 2012-07-06T09:26:31.517 回答