小编mmi*_*nus的帖子

为什么悬空逗号仍然存在?

曾几何时,我在有关编译器的计算机科学课程中编写了一个 C 编译器。部分工作涉及使用Backus Naur Form ( BNF ) 中的 C 语法,如下所示。让我感到奇怪的是,初始化列表的语法允许列表以逗号结尾(所谓的悬空逗号)。我在我的编译器和其他编译器上尝试了它,并确认它是允许的。

例子:

<initializer> ::= <assignment-expression>
            | { <initializer-list> }
            | { <initializer-list> , }
Run Code Online (Sandbox Code Playgroud)

在C中:

int array[] = { 1, 2, 3, };
Run Code Online (Sandbox Code Playgroud)

我的问题:直到今天,悬空逗号仍然是 C 的一部分,其他语言似乎也是如此。为什么他们没有被移除?(假设它们没有任何“适当的”功能(我可能是错的),为什么它们传播到其他语言?)

c parsing

-1
推荐指数
2
解决办法
602
查看次数

标签 统计

c ×1

parsing ×1