ANTLR C грамматика, необязательный init_declarator_list? - PullRequest
0 голосов
/ 17 марта 2010

В грамматике ANSI C для ANTLR v3 (http://antlr.org/grammar/1153358328744/C.g), как init_declarator_list может быть необязательным в объявлении правила?

Вместо:

| declaration_specifiers init_declarator_list? ';'

-Я бы сказал:

| declaration_specifiers init_declarator_list ';'

Какая часть стандарта C допускает такие выражения, как:

int;

EDIT:

Я только что попробовал, это разрешено! Хорошо, тогда почему это разрешено?

Ответы [ 2 ]

0 голосов
/ 26 мая 2016

Вероятно, грамматика ANTLR непосредственно следует грамматике языка Си. Я не читал стандарт C, но для C ++ стандарт отдельно говорит, что init_declarator_list можно опускать только при объявлении класса или типа enum. Таким образом, одна только грамматика охватывает все возможные формы объявления, в то время как каждый конкретный случай дополнительно определяется с использованием простого языка.

Что касается указанного вами случая, int; запрещен правилами вне грамматики.

Обратите внимание, что язык C / C ++ не может быть полностью определен одной только грамматикой. Многие дополнительные правила должны быть указаны простым человеческим языком.

0 голосов
/ 18 марта 2010

Дикая догадка: чтобы было проще писать программы, которые генерируют машинно-генерируемый C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...