Ошибка Antlr «нет жизнеспособной альтернативы у персонажа» - PullRequest
3 голосов
/ 04 января 2012

Я использую доступную грамматику Objective C здесь и пытаюсь проанализировать этот код:

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 голосов
/ 04 января 2012

Это идет не так, потому что правило direct_declarator:

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

требует, чтобы в скобках функции main было что-то.Но если вы сделаете это необязательным:

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

Я почти уверен, что возникнут другие проблемы.Откровенно говоря, эта грамматика довольно отвратительная: я бы не использовал ее на вашем месте.И нет, я не знаю лучшего :).Поскольку грамматика размещена на сайте antlr, это не значит, что это правильная грамматика.Он размещен в вики, где каждый может опубликовать свою работу: помните об этом, когда используете материалы из нее.

...