【发布时间】:2017-05-25 17:34:01
【问题描述】:
我是第一次使用 JavaCC,我注意到它会生成很多死代码。有很多行看起来像(请原谅间距,它是自动的):
{if ("" != null) return result;}
throw new Error("Missing return statement in function");
}
是否可以避免生成这种死代码?它会导致数十个编译器警告,希望可以避免。
谢谢!
这是来自 .jj 文件的完整最小示例:
Statement UseStatement():
{
String dbName;
}
{
<USE> dbName=DbObjectName()
{
return new UseStatement(dbName);
}
}
生成:
final public Statement UseStatement() throws ParseException {String dbName;
jj_consume_token(USE);
dbName = DbObjectName();
{if ("" != null) return new UseStatement(dbName);}
throw new Error("Missing return statement in function");
}
此外,JavaCC 正在生成一个 ParserTokenManager 文件,该文件会引发 TokenMgrError - 但代码无法编译。它声明了一个protected int curChar,它应该声明一个char。谷歌搜索这个短语显示了许多正确声明为 char 的示例 - 这只是很多人手动编辑结果吗?
【问题讨论】:
-
您使用的是什么版本的 JavaCC?您是否尝试过
LEGACY_EXCEPTION_HANDLING = false选项? -
回答你关于
curChar类型的问题,不,这不是很多手工编辑。版本 5 生成的类型为char。 -
LEGACY_EXCEPTION_HANDLING 实际上不是“用户可设置的”,但可以对其进行更改 - 请参阅下面的编辑。我使用的 Maven 插件使用的版本是 6.1.3,但我想出了如何移回原始的 codehaus 插件并将其 JavaCC 版本强制为 7.x。谢谢!
标签: java compiler-construction javacc