在java中编写BASIC解释器 - 循环和ifs

时间:2012-07-06 08:58:41

标签: java interpreter basic

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

第二个想法也许ifs会很容易,但是对于如何处理......下一个循环仍然存在问题(我的翻译不会使用whiles / do..whiles,只有oldschool gotos / gosubs)。

1 个答案:

答案 0 :(得分: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会更简单,就像这样(如果条件在node.args中):

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

我不确定这是否会很好地实现每个IF多个语句,但你的方言也不是。