2010-03-17 2 views
0

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

Вместо:

| declaration_specifiers init_declarator_list? ';' 

Я бы сказал:

| declaration_specifiers init_declarator_list ';' 

Какая часть стандарта C позволяет высказывания типа:

int; 

EDIT:

I просто попробовал, это я разрешено! Итак, почему это разрешено?

ответ

0

Грубое предположение: Для того, чтобы сделать его проще писать программы, которые производят машины сгенерированных C.

0

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

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

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

Смежные вопросы