如何在javacc中实现循环

时间:2013-06-16 15:08:29

标签: parsing javacc gw-basic

我正在实现一个基于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循环以使其正常工作。

或者我做错了。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我的机器代码中有两件事我没想到。一个是循环中的条件跳转。当变量超过V时,控制应跳转到循环后的第一条指令。其次,我没有看到变更的位置。在循环结束时,您将变量的值添加到步长值,但不将结果存储回变量。

我还希望在编译时需要完成一些缺失的检查:NEXT语句中的变量与VAR中的变量匹配,并且步骤为正。