Antlr错误'在角色上没有可行的选择'

时间:2012-01-04 09:37:19

标签: 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 ')'

1 个答案:

答案 0 :(得分:0)

它出错了,因为规则direct_declarator

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

要求main函数的括号内应该有一些内容。但是如果你选择那个:

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

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