2012-06-01 2 views
0

if 문을 javacc에 작성하고 조건이 false 인 경우 본문을 무시하는 방법을 모르겠 음 먼저 두 객체 클래스 토큰 및 부울 변수를 선언하고 다음으로 return method condition(), next 조건이 거짓 일 때 나머지 블록을 건너 뛰고 싶습니다. 그렇게하는 방법?javacc if 문

void ifElse() : 
      { 
       Token start; 
       Token next; 
       boolean cond = false; 
      } 
      { 
       { 
       start = token; 
       } 
       <IF> < LB> cond = condition() < RB> < LP> 
       { 
       if (cond == false) 
       { 
        String tok = (String) token.image; 
        while (tok.equals("}")) 
        { 
        token = token.next; 
        } 

       } 
       } 
       (
       ifElse() 
       | declaration() 
      )* 

       < RP> 
       (<ELSE> < LP> <RP>)? 
      } 
+0

아니요, 사용자가 컴파일하려고합니다. 파싱하고 실행하지 않습니다. – EJP

+0

@EJP 더 명확하게 말해 줄 수 있습니까? 구문 분석을 작성하지만 제대로 작동하지 않는다는 것을 알고 있습니다. – quba88

+2

'조건이 거짓 일 때'블록의 나머지 부분을 건너 뛰도록해야한다고 생각하는 경우에만 '. 구문 분석을 실행과 혼동하고 있습니다. 파서는 원하는 비트가 아닌 전체 프로그램을 처리해야합니다. 나는 그것을 어떻게 더 명확하게 넣을 지 모른다. – EJP

답변

1

코드를 재구성했으며 거의 ​​잘 작동합니다. 몸은 피하고 멈추지 않습니다.

`void ifElse() : 
     { 
      boolean cond = false; 
     } 
     { 
      <IF> < LB> cond = condition() < RB> < LP> 
      { 
      if (cond == false) 
      { 

       while (!token.image.equals("}")) 
       { 
       token = getNextToken(); 
       } 

      } 
      } 
      (
      ifElse() 
      | declaration() 
     )* 

      < RP> 
      (<ELSE> < LP> <RP>)? 
     }`