首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编程语言语法中尾随逗号的历史

问编程语言语法中尾随逗号的历史
EN

Stack Overflow用户
提问于 2010-02-22 23:21:23
回答 4查看 6.3K关注 0票数 20

许多编程语言在语法中允许在列表的最后一项后面加上逗号。假设这样做是为了简化自动代码生成,这是可以理解的。

作为一个例子,下面是一个完全合法的数组初始化(JLS 10.6 Array Initializers):

代码语言:javascript
复制
int[] a = { 1, 2, 3, };

我很好奇是否有人知道哪种语言最先允许像这样的尾随逗号。显然C有它的as far back as 1985。

此外,如果有人知道现代编程语言的其他语法“特性”,我也会很感兴趣。例如,我读到Perl和Python甚至更自由地允许在其语法的其他部分中使用尾随逗号。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-22 23:51:36

我不是逗号方面的专家,但我知道标准的Pascal非常挑剔分号是语句分隔符,而不是结束符。这意味着如果你不想被编译器大喊大叫,你必须非常非常小心地把一个放在哪里。

后来的Pascal式语言(C、Modula 2、Ada等)他们的标准被写成接受奇怪的额外分号,而不是表现得像你刚刚在蛋糕里撒尿一样。

票数 4
EN

Stack Overflow用户

发布于 2010-02-22 23:31:30

我刚刚发现g77 Fortran编译器有-fugly-comma Ugly Null Arguments标志,尽管它有点不同(顾名思义,相当难看)。

-fugly-comma选项允许在实际参数列表中使用单个尾随逗号来表示“传递额外的尾随空参数”给外部过程,使用空的参数列表来表示“传递单个空参数”。

例如,CALL FOO(,)的意思是“传递两个空参数”,而不是“传递一个空参数”。此外,CALL BAR()的意思是“传递一个空参数”。

不过,我不确定它最先出现在哪种语言版本中。

票数 4
EN

Stack Overflow用户

发布于 2010-02-23 10:49:10

有人知道现代编程语言的其他语法“特性”吗?

我最喜欢的语言之一,Modula-3,是在1990年设计的,当时Niklaus Wirth是"Pascal家族“中最新的语言。还有没有人还记得那些关于分号应该是-3中的分隔符或分隔符的可怕的争论,这是你的选择!语句序列的EBNF为

代码语言:javascript
复制
stmt ::= BEGIN [stmt {; stmt} [;]] END

类似地,在CASE语句中编写替代项时,Modula 3允许您使用竖线|作为分隔符或前缀。这样你就可以写

代码语言:javascript
复制
CASE c OF
| 'a', 'e', 'i', 'o', 'u' => RETURN Char.Vowel
| 'y' => RETURN Char.Semivowel
ELSE RETURN Char.Consonant
END

或者,您可以省略初始栏,也许是因为您更喜欢在该位置编写OF。

我认为我喜欢设计本身的原因是设计师们意识到这是一场正在进行的宗教战争,并坚持寻找一种支持双方的方法。让程序员来选择吧!

P.S. Objective Caml允许在case表达式中使用|,而较早的和密切相关的方言标准ML则不允许。因此,在标准ML代码中,case表达式通常更加丑陋。

编辑:在看到T.E.D.的答案后,我检查了Modula 2语法,他是正确的,Modula 2也支持分号作为终止符,但通过空语句的设备,这使得类似于

代码语言:javascript
复制
x := x + 1;;;;;; RETURN x

合法的。我想这不是一件坏事。但是,Modula 2不允许灵活使用大小写分隔符|;这似乎起源于Modula 3。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2311864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档