JavaCC-缺少返回语句异常
在生成的解析器文件中,这个方法抛出一个缺失的return语句异常,尽管我发现return语句总是可以访问的。以下是函数:JavaCC-缺少返回语句异常,java,javacc,Java,Javacc,在生成的解析器文件中,这个方法抛出一个缺失的return语句异常,尽管我发现return语句总是可以访问的。以下是函数: Program Goal(): { MainClass mc; ClassDecl cd; ClassDeclList cdl = new ClassDeclList(); } { mc = mainClass() ( cd = ClassDeclaration() { cdl.addElement(cd);
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);}抛出新错误(“函数中缺少返回语句”)代码>。虽然这看起来很奇怪,但显然无法达到投掷。这是该方法的唯一一次尝试。感谢您的关心:)。虽然有一个生成的抛出,但在执行方法时不会抛出。问题出在另一种方法上。可耻的是,我当时没有很好地追踪到错误,但现在一切都好了。我正在编辑中将解决方案链接到我的问题。谢谢