简单定义“语义”,因为它常用于编程语言/ API?

时间:2010-07-19 00:29:57

标签: programming-languages computer-science definition semantics

今天我想到,尽管我在引用语言元素和命名约定时已经采用并且不经常使用术语“语义”,但我没有任何正式定义的意义。

My attempt to find a formal definition in the programming domain让我的眼睛睁开了。

我从我遇到它的背景以及它在语言学方面的更常见用法中了解它的含义,我通常使用该术语来指代 的含义或语言元素的表达能力,或者命名的忠实度,它命名为 的意图,行为或功能。

然而,这个定义是我自己的想法。我是一名人类学/英语专业,从未上过计算机科学课程。这是在CS中教授的吗?

是否有更准确的定义可以归结为一两个陈述,而不是一篇详尽而令人筋疲力尽的文章?

3 个答案:

答案 0 :(得分:6)

来自here的定义是编程语言的语义描述了语法和计算模型之间的关系。。这几乎就是您的推断定义。粘着点,以及让你的眼睛茫然的是精确定义计算模型。

有许多不同的正式计算模型,每种模型都会导致不同形式的语义。操作语义可能最接近大多数人非正式地模拟语义的方式,让每个代码片段通过解释器运行并改变抽象例程的状态。这种方法在许多并发或非确定性等模型中都会出现问题,因此还有其他更适合这些情况的语义。

答案 1 :(得分:6)

语言元素的含义就其在计算方面的正式含义而言(通常,这是操作语义)。这意味着它表达了你的语言术语有效地做了什么假设一种潜在的模型取决于我们正在谈论的语义。

从维基百科页面可以看出,你主要有3种语义:

  • 操作语义通过指定抽象虚拟机在执行术语时的行为方式来表达语言的含义。 (例如:+:弹出堆栈中的两个元素并推送总和。这是 NOT 正式, NOT 你应该如何真正考虑它,它是只是为了给你一个想法)。这是用于描述“普通”编程语言的语义的最常用的一种。例如,对于Java,您可以为每个可能的术语提供一系列JVM指令,用于对该术语进行建模。 当您询问语义的含义时,可能就是您要找的那个。
  • 指称语义是一种不同的方法:您为语言的每个术语赋予由数学函数表示的含义。因此,对于前面的示例,您将拥有与+关联的函数 f ,其中包含术语
  • 的语义(有效含义)
  • 公理语义是一种注释语言术语的方法,表达它们如何改变您想要在程序中验证的某些逻辑公式的有效性。您应该考虑阅读this只是因为推理规则和公理在开发这种语义方面是相似的,但它是以实用的方式解释的

从这个解释中你可以理解语义是在上下文中定义得很好的东西,你需要一个指定的上下文,否则你不能给你一个语言正式的术语定义。

答案 2 :(得分:5)

从编程语言的理论和实践的角度来看,语言元素具有语义。命名约定没有。并且语义与任何事物的“保真度”无关,除非是如果一个实现是正确的,它有时被称为“忠实于语义。”

除此之外,很难概括,因为有太多不同风格的语义。

  • 克里斯托弗·斯特拉希(Christopher Strachey)真的推动了这个想法,通常是一个短语(想想声明定义声明表达式)由较小的子短语组成,并且较大短语的含义(语义)应该是成分子短语的含义的函数。在这种风格中,每个语法上格式良好的子短语都有语义。听起来这就是你要找的东西。

还有其他语义风格,称为“操作语义”,给定一个程序,语义告诉你如何在抽象机器上执行该程序(或者在另一个变体中,语义不是说程序将如何执行)执行但只是结果会是什么。)

有“公理语义”,大概是关于个人计划可以证明的事实。公理语义是有效证明技术的集合。由实施来确保所有可证明的声明都是真实的。

还存在“静态语义”,其通常意味着在编译时强加的任何要求,以使程序被认为是“好”或“良好形成”。像“变量必须在使用之前定义”之类的东西是静态语义。但大多数人说静态语义时,他们的意思是类型检查。

最后,可以谈论抽象数据类型,类或接口等的“语义”。这种用法是一个很好的松散,但它们可以归结为允许哪些行为的规范。我建议你在这种情况下避免使用“语义”一词,而是使用“合同”或“规范”这个词。这样可以避免混淆。


评论:尝试将一个复杂的主题归结为一个或两个句子并不总是有帮助的。当谈到编程语言时,不会在Wikipedia上寻找好的信息。维基百科的人意味着很好,但他们往往是复杂的,令人困惑的,或者说是完全错误的。