2012-06-01 88 views
0

我寫了如果在javacc中聲明並且不知道如何忽略body如果條件爲false 首先我聲明兩個對象類Token和布爾變量,接下來我檢查一下返回方法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>)? 
     }`