对于出现在POPL或ICFP等学术会议上的语言,通常会很好地指定语言的语义(以operational或denotational语义的形式)。我试图为流行的语言(例如,C、Python、JavaScript)找到文档化的语义,但是没有找到。
当开发具有“重”特性的语言(相对作为概念证明而设计的语言)时,这些语言的设计者(或委员会成员)是否会在不指定其语义的情况下添加特性?大多数流行的编程语言都是这种情况吗?
如果是这样的话,我认为这实际上是有意义的,因为并不是每个想要为开发语言做出贡献的人都需要成为PL研究员。但我想知道在现实世界中存在什么样的权衡。
发布于 2019-01-24 20:17:29
一些动态编程语言的语义正在出现,因为它们的语法核心是最小的,并且主要是由它们的库定义的(实际用于编程的语言比语法定义的语言要长得多)。示例如下:
一些语言定义了如此多的语法歧义,以至于语义最终是由特定的实现定义的。示例:
任何具有宏功能的编程语言,或者通常与宏预处理器一起使用的编程语言,最终都会通过使用的宏来重新定义语义(就像在特定于域的语言中一样)。允许在运行时更改解析行为的动态语言也是在运行时定义的。
在面向对象的语言(以及其他根据对象的类型进行调度的语言)中,表达式的语义取决于所涉及的对象的类型,而这些语义可能在很大程度上与内置类型和标准类型的等价表达式的语义不同。
发布于 2019-01-18 07:15:39
几乎所有的语言都是用诸如BNF这样的标准符号来定义的。This site has references to many。
这在一定程度上是为了消除歧义并确保语法一致性。如果没有它们,将很难构建编译器或渲染器。
这部分内容进入了design of HTML5.2,它解释了一些推理。
https://stackoverflow.com/questions/54245509
复制相似问题