如何基于JavaCC中的解析异常创建特定的错误消息
我正在制作一个JavaCC程序来接受某种语言。我已经这样做了,但不理解如何使用生成的ParseException来确定输入中的问题,并自定义输出错误消息 到目前为止,我的代码如下所示:如何基于JavaCC中的解析异常创建特定的错误消息,java,javacc,parseexception,Java,Javacc,Parseexception,我正在制作一个JavaCC程序来接受某种语言。我已经这样做了,但不理解如何使用生成的ParseException来确定输入中的问题,并自定义输出错误消息 到目前为止,我的代码如下所示: try { task parser = new task(System.in); parser.start(); System.out.println("YES"); // If accepted print YES. } catch (ParseException e) { System.out
try {
task parser = new task(System.in);
parser.start();
System.out.println("YES"); // If accepted print YES.
} catch (ParseException e) {
System.out.println("NO"); // If rejected print NO.
switch (e) {
case 1:
System.err.println("Some error case")
case 2:
...
}
}
我看过的一些源代码是ParseException文档和JavaCC错误处理页面。两者都没有帮助我更好地理解
如果有人能提供帮助/提示,我将非常感谢。您可以使用自定义字符串抛出
ParseException
。比如说
void Primary() : {}
{
<INT>
|
"("
|
{throw new ParseException("At "+getCoords()
+" there was \""+ getToken(1).image
+ "\", but the parser expected either"
+ " a \"(\" or an integer literal.");}
}
void Primary():{}
{
|
"("
|
{抛出新的ParseException(“At”+getCoords()
+“有\”“+getToken(1)。图像
+“\”,但分析程序应为
+“a\”(\”或整数文字。“);}
}
如果您愿意付出足够的努力,那么应该可以创建一个解析器,它不会抛出没有自定义消息的
ParseException
。通常要做的事情是System.err.println(e.getMessage())
。这些消息对您的应用程序来说不够好吗?不幸的是,不好-这实际上是我在不久的将来要问的另一个问题!我必须明确说明字符串不被接受的原因(一个简单的例子是字符串的长度不正确).至于这个问题,我的代码对于这种类型的错误看起来正确吗?我不太擅长错误处理。我想它不应该是switch(e)
-可能是switch(e.getPosition())
?此外,包含此代码的方法是否需要抛出ParseException
,或者try…catch
是否不需要此项?您所问的代码不会抛出ParseException。这是否仍然有效?我得到错误:找不到符号{if(true)抛出新的ParseException(“At”+getCoords()^symbol:method getCoords()
要使此方法起作用,您需要在解析器类中定义getCoords()方法。它需要生成一个字符串或对象,以适当设置当前坐标的格式。