我正在实现一个基于javacc的解析器,它将能够使用GW Basic程序。
我实现了像这样的循环
void forloop(Token line):
{
Token toV;
Token toI;
Token step;
Token next;
Token var;
}
{
<FOR> var=<VARIABLE> "=" Expression() { instructions.add("STORE " + var.image); } <TO> toV=<INTEGER> <STEP> step=<INTEGER>
{
instructions.add("LABEL "+labelsCntr);
instructions.add("LOAD "+var.image);
instructions.add("CONST "+toV.image);
instructions.add("SUB");
instructions.add("CONST 0");
}
( Line() )*
next = <INTEGER> <NEXT> <VARIABLE>
{
instructions.add("LINE "+next.image);
instructions.add("LOAD "+step.image);
instructions.add("LOAD "+var.image);
instructions.add("ADD");
instructions.add("JMP LABEL "+(labelsCntr));
labelsCntr++;
}
}
但它不起作用。
如何实现for循环以使其正常工作。
或者我做错了。
提前致谢。
答案 0 :(得分:2)
我的机器代码中有两件事我没想到。一个是循环中的条件跳转。当变量超过V时,控制应跳转到循环后的第一条指令。其次,我没有看到变更的位置。在循环结束时,您将变量的值添加到步长值,但不将结果存储回变量。
我还希望在编译时需要完成一些缺失的检查:NEXT语句中的变量与VAR中的变量匹配,并且步骤为正。