Antlr 错误 'no viable alternative at character'

标签 antlr antlr3 antlrworks

我正在使用可用的 Objective C 语法 here ,并尝试解析这段代码:

int main()
{   
    int k=0;
}

这是一个客观的 C 代码,它应该被解析,但是当我调用函数 translation_unit 时它给了我以下错误。 错误是:

line 1:0 no viable alternative at character 'main'
line 1:0 no viable alternative at character '('
line 1:0 no viable alternative at character ')'

最佳答案

出错是因为规则direct_declarator:

direct_declarator 
 : identifier declarator_suffix*
 | '(' declarator ')' declarator_suffix* 
 ;

规定 main 函数的括号内应该有一些东西。但是,如果您将其设为可选:

direct_declarator 
 : identifier declarator_suffix*
 | '(' declarator? ')' declarator_suffix* 
 ;

我很确定还会出现其他问题。坦率地说,该语法非常糟糕:如果我是你,我不会使用它。不,我不知道还有更好的 :)。因为语法发布在 antlr-site 上并不意味着它是正确的语法。它发布在 Wiki 上,任何人都可以在其中发布他们的作品:在使用其中的内容时请记住这一点。

关于Antlr 错误 'no viable alternative at character',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8724694/

相关文章:

antlr - ANTLR 中复杂的 AST 重写规则

java - ANTLR 通配符运算符不消耗预期输入

java - 在 ANTLR 中处理 EOF、空格和换行符

python - ANTLR解析MismatchedTokenException

java - Antlr 4 中的匹配输入替代方案

java - 没有方法program()来构建解析树对象

即使不匹配,ANTLR 词法分析器规则也会消耗字符?

tree - 评估同质 AST 中的 IF 子树

java - ANTLR 不会在无效输入上抛出错误

java - ANTLR 生成无效的 Java 异常抛出代码