我想生成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.
您最有可能寻找的是displayRecognitionError()功能.在您感兴趣的情况下调用此函数,并且该函数是C运行时的一部分.
如果您想查看如何使用此功能的示例,请查看此邮件列表帖子.虽然这段代码混合了C和C++,但您应该能够从中得到所需的内容.
在Java中处理识别异常将如下所示:
grammar X;
// ...
@rulecatch{
catch(RecognitionException rex) {
// do something
}
}
// parser rules
// lexer rules
Run Code Online (Sandbox Code Playgroud)
换句话说,只需在@rulecatch{ ... }块中添加一些自定义C代码.