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

寻找生成C代码时非常简单的ANTLR错误处理示例,antlr,antlr3,Antlr,Antlr3,我想生成C代码。我不会一次读取一行输入文件(例如,编译器可能会这样做)。相反,我将在用户输入到达时解析它,一次一行 我更喜欢在lexer/解析器中检测和处理错误输入,例如 /* lexer tokens */ foo : "FOO"; bar : "BAR"; baz : "BAZ"; /* grammar*/ grammar : foo "=" BAZ | foo "=" BAR | <some non-existent Antrl-else>

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

我更喜欢在lexer/解析器中检测和处理错误输入,例如

/* lexer tokens */
foo : "FOO";
bar : "BAR";
baz : "BAZ";
/* grammar*/
grammar : foo "=" BAZ 
        | foo "=" BAR 
        | <some non-existent Antrl-else> :  {printf(stderr, "bad input\n");}
        ;
/*lexer令牌*/
foo:“foo”;
酒吧:“酒吧”;
巴兹:“巴兹”;
/*文法*/
语法:foo“=”BAZ
|foo“=”条
|:{printf(stderr,“错误输入”;}
;
好的,如果我无法在lexer/解析器中捕捉到它,那么我似乎需要使用
displayRecognitionError()
但是如何呢

有人能给我举一个非常简单的例子,它生成C代码并显示一些无效输入的错误处理吗

谢谢


好的,赏金,伊佩


但这只是为了一个真实的、有效的答案,以及真实的、有效的代码。如果没有wxample,就不会有“use method X()”。

在Java中处理识别异常会是这样的:

grammar X;

// ...

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

// parser rules

// lexer rules 

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

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


如果您想查看如何使用此函数的示例,请参阅。虽然这个代码混合了C和C++,但是你应该能从中找出你需要的东西。Bart,我怀疑这是我能得到的最好答案。我会让它开放几天,以防有人给出一些优秀的C演示代码,如果没有,那么就奖励你答案。谢谢你的帮助没问题。如果我有时间,我甚至可以制作一个小小的C演示,但至少可以说我的C已经生锈了!我很快就看过了C运行时:
configure
-ing和
make
-ing为C运行时并生成一个lexer&parser很好,但是用一个使用这些lexer&parser文件的main方法编写一个小应用程序没有,我不想在上面花费更多的时间,对不起。我希望其他人能帮你。但是你试过我推荐的吗?如果你尝试了,但失败了,那么提及到底出了什么问题可能会有所帮助。祝你好运。谢谢你尝试巴特。我正沉浸在其他工作中,所以等着看是否有人把代码放在我的膝上以获得赏金:-)如果没有,我会尝试按照你说的去做&弄明白(你会得到分数)谢谢,巴特。当我有几个空闲时间(叹气)的时候,我会试着按照你说的去做&把它弄明白。如果我不能回答,那么毫无疑问还有另一个问题:-)仅供参考:无论你是否接受答案,在这些天结束后,奖金将以最多的票数流向答案。也许这个帖子会有所帮助:(注意贴在这个问题上的各种答案!)我看到你在例子中使用了printf。恐怕是用C语言还是C++语言?所以没有C++异常处理。非常感谢,我会查一下。对不起,我已经接受了答案;我没想到会有另一个。别担心,希望它能帮助你