回答
那么,一个很好的指导性例子就是看看Pascal and the ;
命令分隔符发生了什么。
规则尼克劳斯维斯(帕斯卡尔的设计者)提出的是,;
是用来区分块内的语句。从编译器的角度来看,这是明智的,因为这是严格要求解析歧义性的句法元素的唯一情况。另外,它通常已经用逗号完成了,所以处理它的代码就在那里。
问题是这是一个奇怪的规则,对于人类编码者来说,这是一个艰难的规则。面对变化也不稳定;如果在块的末尾添加或删除一行,则必须更改哪一行不是分号。大多数Pascal用户在每个编码/调试周期都结束了整个阶段,这些阶段归结为他们的编译器随地吐痰错误,直到他们得到正确的分号为止。他们会讨厌这个问题,并且最终他们讨厌Pascal。
将此与Pascal及其后代引入的相对较强的打字概念相结合,并且您有一些非常胡思乱想的开发人员。他们开始打电话给Pascal及其同行,并且倾向于像C这样的更宽容的语言。这会阻碍许多更好的语言的发展,所有这些都是因为具有良好理论概念的人使他的语言成为了PITA使用的语言。
对于后来设计的语言,Nicklaus Wirth吸取了教训,并将分号定义为命令终止符,而不是分隔符。当然,C设计人员更进一步,并允许额外的分号成为合法(但被忽略)的语法元素。
“C语言的设计者当然更进一步,让额外的分号成为合法(但是被忽略)的语法元素。” 这是我不遵循的一个例子。你为什么要允许;;;? – noop 2011-05-17 16:07:25
@Jeremy - K&R在某处可能有一段引用,但我怀疑这对Pascal来说大部分是(过度)反应。我曾遇到过一位认为那些实际上插入了“NOOP”机器代码语句的C编码人员。他会把它们作为“优化”去除。 :-) – 2011-05-17 16:19:16
推测用户定义他们自己的风格(这是否由某些编辑器规则强制执行)的选项优于强制某种风格作为其语法一部分的语言。然而,有些语言在涉及特定规则时稍微严格一些。例如,Haskell中有一个'特性',其中一个给定的行必须比前面的一行缩进得更远才能正常工作(我忘记了这个特定语言特性的名称,但我确信有人知道)。
- 1. c语言中的语法是什么语法作为参数
- 2. 任何语言是否严格“以语句为导向”?
- 3. “严格回报”的语义是什么?
- 4. MonadFix以严格的语言编写
- 5. 这个语法代表什么语言?
- 6. 为什么在ssrs中使用sql语言代替mdx语言?
- 7. 在Ionic2上更改语言 - 更改所有页面语言的最有效方法是什么?
- 8. 为语法指定语言
- 9. 自然语言和编程语言在语法环境中有什么区别?
- 10. 为什么XML语言的GitHub库的语言栏
- 11. 为什么这种上下文无关的语法语言不适合?
- 12. 用于描述编程语言语法的术语是什么?
- 13. 什么让编程语言更快?
- 14. 描述语言语法的这种语言的名称是什么?
- 15. 什么语法糖或语言功能使语言难以解析?
- 16. Python语法最接近的语言是更低级的语言!
- 17. Vim的语法文件是关于HTML语法严格
- 18. 为什么我不能在wordpress仪表板中更改语言?
- 19. 为什么语言不正常?
- 20. 什么语言可以编译为javascript?
- 21. C语言:为什么我得到NULL?
- 22. 在Haskell上编程矩阵的语言学方法是什么?
- 23. 将PayPal语言更改为英语
- 24. 什么语言是c#?
- 25. 什么语言使用“fi”
- 26. 什么是模板语言?
- 27. Windows:什么编程语言?
- 28. 什么是胶水语言?
- 29. 这是什么语言?
- 30. XNA使用什么语言?
因为没有人(除了你)会使用这种语言。 – 2011-05-17 15:27:49
随意编写自己的“严格”的语言。几乎总是,每种语言的创造者都有他们自己的设计选择,有些严格的有些宽松,原因很好。 – RedFilter 2011-05-17 15:29:35
不投票重新开放,但我不会相信这是一个真正的“争论”问题,直到我看到有人(不是OQ)实际上试图争论。 – 2011-05-17 15:50:06