在生成C代码时寻求非常简单的ANTLR错误处理示例

Maw*_*awg 5 antlr antlr3

我想生成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");}
        ;
Run Code Online (Sandbox Code Playgroud)

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

任何人都可以指出一个非常简单的例子,它生成C代码并显示一些无效输入的错误处理?

谢谢!


好的,赏金,yippee!

但只有真正的,有效的代码才能得到真正的工作答案.没有"使用方法X()"没有wxample.

a_m*_*m0d 7

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

如果您想查看如何使用此功能的示例,请查看此邮件列表帖子.虽然这段代码混合了C和C++,但您应该能够从中得到所需的内容.


Bar*_*ers 5

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

grammar X;

// ...

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

// parser rules

// lexer rules 
Run Code Online (Sandbox Code Playgroud)

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