Это идет не так, потому что правило direct_declarator
:
direct_declarator
: identifier declarator_suffix*
| '(' declarator ')' declarator_suffix*
;
требует, чтобы в скобках функции main
было что-то.Но если вы сделаете это необязательным:
direct_declarator
: identifier declarator_suffix*
| '(' declarator? ')' declarator_suffix*
;
Я почти уверен, что возникнут другие проблемы.Откровенно говоря, эта грамматика довольно отвратительная: я бы не использовал ее на вашем месте.И нет, я не знаю лучшего :).Поскольку грамматика размещена на сайте antlr, это не значит, что это правильная грамматика.Он размещен в вики, где каждый может опубликовать свою работу: помните об этом, когда используете материалы из нее.