【问题标题】:Try-catch block in JavaCC grammarJavaCC 语法中的 try-catch 块
【发布时间】:2012-03-15 19:23:32
【问题描述】:

我正在尝试在JavaCC 语法中实现错误报告和恢复

我在.jjt语法文件中提到了如下代码

void Stm() :
{}
{
  try {
    (
      IfStm()
    |
      WhileStm()
    )
  }catch (ParseException e) {
    error_skipto(SEMICOLON);
  }
}


void error_skipto(int kind) {
  ParseException e = generateParseException();  // generate the exception object.
  System.out.println(e.toString());  // print the error message
  Token t;
  do {
    t = getNextToken();
  } while (t.kind != kind);
}

当我执行命令jjtree CMinus.jjt 时出现以下错误:

从文件 CMinus_ragu.jjt 中读取。 . . 解析输入错误:org.javacc.jjtree.ParseException: Encountered ""{" "{"" a t 第 111 行,第 30 列。 期待其中之一: “扔”... “:”…… "#" ...

代码中的错误是什么,应该如何处理错误恢复?

【问题讨论】:

    标签: java parsing javacc parser-generator


    【解决方案1】:

    语法文件中的错误处理代码前应添加关键字JAVACODE。因此该方法应如下所示:

    JAVACODE
    void error_skipto(int kind) {
      ParseException e = generateParseException();  // generate the exception object.
      System.out.println(e.toString());  // print the error message
      Token t;
      do {
        t = getNextToken();
      } while (t.kind != kind);
    }
    

    这是因为在使用java风格制作之前要加上关键字JAVACODE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多