5

我想生成 C 代码。我不会从输入文件中读取,一次一行(例如,编译器可能)。相反,我将在用户输入到达时对其进行解析,一次一行。

我更愿意检测和处理词法分析器/解析器中的错误输入,例如

/* lexer tokens */
foo : "FOO";
bar : "BAR";
baz : "BAZ";
/* grammar*/
grammar : foo "=" BAZ 
        | foo "=" BAR 
        | <some non-existent Antrl-else> :  {printf(stderr, "bad input\n");}
        ;

好的,如果我无法在词法分析器/解析器中捕获它,我似乎需要使用它,displayRecognitionError()但是如何使用?

谁能指出一个非常简单的示例,该示例生成 C 代码并显示对无效输入的一些错误处理?

谢谢!


好的,赏金,yippee!

但仅适用于具有真实有效代码的真实有效答案。没有 wxample 就没有“使用方法 X()”。

4

2 回答 2

7

您最有可能寻找的是displayRecognitionError()功能。此函数在您感兴趣的情况下被调用,并且是 C 运行时的一部分。

如果您想查看如何使用此功能的示例,请查看此邮件列表帖子。尽管此代码混合了 C 和 C++,但您应该能够从中找出您需要的内容。

于 2010-01-13T15:15:31.643 回答
5

在 Java 中处理识别异常将如下所示:

grammar X;

// ...

@rulecatch{
  catch(RecognitionException rex) {
    // do something
  }
}

// parser rules

// lexer rules 

换句话说,只需在@rulecatch{ ... }块内添加一些自定义 C 代码。

于 2010-01-05T10:49:31.653 回答