如何基于JavaCC中的解析异常创建特定的错误消息

如何基于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

我正在制作一个JavaCC程序来接受某种语言。我已经这样做了,但不理解如何使用生成的ParseException来确定输入中的问题,并自定义输出错误消息

到目前为止,我的代码如下所示:

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()方法。它需要生成一个字符串或对象,以适当设置当前坐标的格式。