If statement javacc if语句

If statement javacc if语句,if-statement,javacc,If Statement,Javacc,我用javacc编写了if语句,如果条件为false,我不知道如何忽略主体 首先声明两个对象类标记和布尔变量,然后检查返回方法condition(),然后在condition为false时跳过块的其余部分。怎么做 void ifElse() : { Token start; Token next; boolean cond = false; }

我用javacc编写了if语句,如果条件为false,我不知道如何忽略主体 首先声明两个对象类标记和布尔变量,然后检查返回方法condition(),然后在condition为false时跳过块的其余部分。怎么做

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 >)?
            }
void ifElse():
{
令牌启动;
下一步;
布尔cond=false;
}
{
{
开始=令牌;
}
cond=condition()
{
如果(cond==false)
{
字符串tok=(字符串)token.image;
而(tok.equals(“}”))
{
token=token.next;
}
}
}
(
ifElse()
|声明()
)*
)?
}

我已重新配置了您的代码,它几乎可以正常工作。避开身体但不停止

 `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 >)?
        }`
`void ifElse():
{
布尔cond=false;
}
{
cond=condition()
{
如果(cond==false)
{
而(!token.image.equals(“}”))
{
token=getNextToken();
}
}
}
(
ifElse()
|声明()
)*
)?
}`

不,您不需要,您需要编译它。您正在解析,而不是执行。@EJP您能更清楚地告诉我吗?我知道这会构建一个解析,但它不能正常工作。只有在您认为它应该“在条件为false时跳过块的其余部分”的情况下。您将解析与执行混为一谈。解析器必须处理整个程序,而不仅仅是您喜欢的位。我不知道怎么说得更清楚。