ANTLR C语法,可选init_declarator_list?

时间:2010-03-17 16:41:34

标签: c syntax declaration

在ANTLR v3的ANSI C语法(http://antlr.org/grammar/1153358328744/C.g)中,init_declarator_list如何在规则声明中成为可选项?

而不是:

| declaration_specifiers init_declarator_list? ';'

- 我会说:

| declaration_specifiers init_declarator_list ';'

C标准的哪个部分允许使用以下语句:

int;

编辑:

我刚试过,这是允许的!那么,为什么允许这样做?

2 个答案:

答案 0 :(得分:0)

一个疯狂的猜测:使编写生成机器生成的C的程序更简单。

答案 1 :(得分:0)

可能ANTLR语法直接遵循C标准语法。我还没有阅读C标准,但对于C ++,标准分别说明init_declarator_list只有在声明类或枚举类型时才能省略。因此,语法本身仅包含所有可能的声明形式,而每个特定情况都使用简单语言进一步定义。

至于你指出的情况,语法之外的规则不允许int;

请注意,单独使用语法无法完全定义C / C ++语言。必须用简单的人类语言指定许多额外的规则。