2013-06-16 4 views
0

GW Basic 프로그램을 사용할 수있는 javacc를 기반으로하는 파서를 구현하고 있습니다.javacc에서 for 루프를 구현하는 방법

나는이

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

내가 예상 한대로 기계 코드에 표시되지 않는 두 가지 사항이 있습니다. 하나는 루프에서 조건부 점프입니다. 변수가 toV를 초과하면 컨트롤은 루프 이후의 첫 번째 명령으로 이동해야합니다. 둘째, var가 어디에서 변경되는지는 알 수 없습니다. 루프의 끝에서 변수의 값을 단계 값에 추가하지만 결과를 변수에 다시 저장하지 마십시오.

누락 된 컴파일 시간에 수행해야 할 몇 가지 검사가 있습니다. NEXT 문의 변수가 VAR의 변수와 일치하고 단계가 양수임을 확인하십시오.