本文: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)。
答案 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
多个语句,但你的方言也不是。