JavaCC-缺少返回语句异常

JavaCC-缺少返回语句异常,java,javacc,Java,Javacc,在生成的解析器文件中,这个方法抛出一个缺失的return语句异常,尽管我发现return语句总是可以访问的。以下是函数: Program Goal(): { MainClass mc; ClassDecl cd; ClassDeclList cdl = new ClassDeclList(); } { mc = mainClass() ( cd = ClassDeclaration() { cdl.addElement(cd);

在生成的解析器文件中,这个方法抛出一个缺失的return语句异常,尽管我发现return语句总是可以访问的。以下是函数:

Program Goal():
{
  MainClass mc;
  ClassDecl cd;
  ClassDeclList cdl = new ClassDeclList();
}
{
  mc = mainClass()
   (
     cd = ClassDeclaration()
     {
       cdl.addElement(cd);  
     }
   )* < EOF >
   {
     return new Program(mc, cdl);
   }
}
程序目标():
{
主级mc;
ClassDecl光盘;
ClassDeclList cdl=新的ClassDeclList();
}
{
mc=mainClass()
(
cd=ClassDeclaration()
{
cdl.附录(cd);
}
)*
{
返回新程序(mc、cdl);
}
}
谢谢

编辑

所以,问题不在于这个方法,而在于另一种方法。简言之,问题在于,在该方法中,我有一些ORs,最后还有一个java返回语句,但是我错过了

以下是我应该做的

Exp expression() :
{
  Token t;
  Exp exp = null;
  IntegerLiteral il;
  FloatLiteral fl;
  CharLiteral cl;
  StringLiteral sl;
  String s;
  Identifier id;
  Exp tmpExp = null;
}
{
  ( // <--- This and its enclosing parenthesis are what I missed.
    (
      t = < INTEGRAL_LITERAL >
      {
        il = new IntegerLiteral(Integer.parseInt(t.image));
      }
      exp = ExpressionBar(il)
    )
  |
    (
      t = < FLOAT_LITERAL >
      {
        fl = new FloatLiteral(Float.parseFloat(t.image));
      }
      exp = ExpressionBar(fl)
    )
  |
    (
      t = < CHAR_LITERAL >
      {
        cl = new CharLiteral(t.image.charAt(1));
      }
      exp = ExpressionBar(cl)
    )
  |
    (
      t = < STRING_LITERAL >
      {
        sl = new StringLiteral(t.image);
      }
      exp = ExpressionBar(sl)
    )
  )
  {
    return exp;
  }
}
Exp expression():
{
令牌t;
Exp=null;
整合性白细胞介素;
浮点数;
炭黑;
StringLiteral-sl;
字符串s;
标识符id;
Exp tmpExp=null;
}
{
( // 
{
il=新的IntegerLiteral(Integer.parseInt(t.image));
}
exp=表达式栏(il)
)
|
(
t=
{
fl=新的FloatLiteral(Float.parseFloat(t.image));
}
exp=表达式栏(fl)
)
|
(
t=
{
cl=新字符(t.image.charAt(1));
}
exp=表达式条(cl)
)
|
(
t=
{
sl=新的StringLiteral(t.image);
}
exp=表达式栏(sl)
)
)
{
返回经验;
}
}

执行该方法时是否实际引发异常?@TheodoreNorvell是的。我无法重现该问题。我复制并粘贴了上面的定义,并通过JavaCC5运行了它。方法目标的java输出以
{if(true)return new Program(mc,cdl);}抛出新错误(“函数中缺少返回语句”)。虽然这看起来很奇怪,但显然无法达到投掷。这是该方法的唯一一次尝试。感谢您的关心:)。虽然有一个生成的抛出,但在执行方法时不会抛出。问题出在另一种方法上。可耻的是,我当时没有很好地追踪到错误,但现在一切都好了。我正在编辑中将解决方案链接到我的问题。谢谢