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

时间:2010-01-05 01:59:41

标签: 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");}
        ;

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

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

谢谢!


好的,赏金,yippee!

但仅限于真实,有效的代码,真实有效的代码。没有“使用方法X()”没有wxample。

2 个答案:

答案 0 :(得分:7)

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

如果您想查看如何使用此功能的示例,请查看this mailing list post。虽然这段代码混合了C和C ++,但您应该能够从中找到所需的内容。

答案 1 :(得分:5)

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

grammar X;

// ...

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

// parser rules

// lexer rules 

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