Java 解析API函数中的冗余代码?

Java 解析API函数中的冗余代码?,java,parsing,lucene,javacc,Java,Parsing,Lucene,Javacc,在研究一些解析API时,我遇到了一种用于编写解析函数的常用技术: final public Query parse() throws ParseException { Query q; // some parsing code using tokens here {if (true) return q;} throw new Error("Missing return statement in function"); } 我注意到许多解析器类都在使用相同的语法 (即org.a

在研究一些解析API时,我遇到了一种用于编写解析函数的常用技术:

final public Query parse() throws ParseException {
  Query q;
  // some parsing code using tokens here

  {if (true) return q;}
  throw new Error("Missing return statement in function");
}
我注意到许多解析器类都在使用相同的语法

(即org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser#TopLevelQuery&

)

这让我很困惑,因为我不能得出一个具体的结论,为什么这段代码是这样写的

除了强调它必须总是返回一些东西之外,还有什么隐藏的东西吗


提前感谢,

自动生成的代码通常是正确的,但看起来很不优雅。要生成正确的代码而不担心优雅是很困难的


似是而非的猜测:{存在是因为在那一点上,生成器不知道它是否需要它;它很快就会学习,但“很快”不是“现在”。之所以出现这种情况,是因为此时生成器不确定它是否已为100%的输入生成了返回语句。

该类已自动生成。源代码:
/*生成者:JavaCC:不要编辑这一行。JsonParser.java*/
。我无法告诉您为什么JavaCC的作者选择生成无用的条件hough.也许你可以在生成之前插入额外的返回条件?我还想知道,如果没有
返回
,为什么他们选择
抛出错误
,而不是让类留下编译错误。我猜这是从Javascript代码生成的,其中返回语句是可选的。翻译进入Java可能需要这种方法,但不知道为什么。首先,代码不是按通常意义编写的,它是按照其他人提到的那样生成的。
throw
命令在那里,因为没有它,代码将无法编译。至少Eclipse编译器会出现致命错误。(尝试删除该行,看看会发生什么。)真正的问题是为什么
if(true)
会出现,对此我没有答案。顺便说一句,这与强调无关,因为你真的不应该阅读这个文件,除非有错误需要修复。它与JavaScript无关;JavaCC的输入是一个JavaCC语法文件。