2012-06-01 1 views
0

Я написал инструкцию if в javacc и не знаю, как игнорировать, если тело является ложным Сначала я объявляю два класса объектов Token и логическую переменную, затем я проверяю, что возвращает метод condition(), next Я хочу пропустить остаток блока, когда условие ложно. Как это сделать?javacc if statement

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>)? 
     }`