在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;
编辑:
我刚试过,这是允许的!那么,为什么允许这样做?
答案 0 :(得分:0)
一个疯狂的猜测:使编写生成机器生成的C的程序更简单。
答案 1 :(得分:0)
可能ANTLR语法直接遵循C标准语法。我还没有阅读C标准,但对于C ++,标准分别说明init_declarator_list
只有在声明类或枚举类型时才能省略。因此,语法本身仅包含所有可能的声明形式,而每个特定情况都使用简单语言进一步定义。
至于你指出的情况,语法之外的规则不允许int;
。
请注意,单独使用语法无法完全定义C / C ++语言。必须用简单的人类语言指定许多额外的规则。