Formal semantics “什么是”呢;形式语义学;?

Formal semantics “什么是”呢;形式语义学;?,formal-semantics,Formal Semantics,我正在读一篇非常愚蠢的论文,它一直在谈论乔托是如何定义“形式语义学”的 Giotto有一个正式的语义,它指定了模式切换、任务间通信以及与程序环境通信的含义 我处于边缘,但不能完全理解“形式语义学”的含义。用一种形式化的方式描述语义学,使用符号以明确的方式表达事物的意义 它与非正式语义学相反,后者本质上只是用简单的英语描述一切。这可能更容易阅读和理解,但它可能会造成误解,这可能会导致错误,因为有人没有按照您希望的方式阅读段落 一种编程语言可以有正式语义和非正式语义——非正式语义可以作为正式语义的“

我正在读一篇非常愚蠢的论文,它一直在谈论乔托是如何定义“形式语义学”的

Giotto有一个正式的语义,它指定了模式切换、任务间通信以及与程序环境通信的含义

我处于边缘,但不能完全理解“形式语义学”的含义。

用一种形式化的方式描述语义学,使用符号以明确的方式表达事物的意义

它与非正式语义学相反,后者本质上只是用简单的英语描述一切。这可能更容易阅读和理解,但它可能会造成误解,这可能会导致错误,因为有人没有按照您希望的方式阅读段落


一种编程语言可以有正式语义和非正式语义——非正式语义可以作为正式语义的“纯文本”解释,如果你不确定非正式解释的真正含义,那么正式语义将是一个可以查看的地方。

要稍微扩展一下Michael Madsen的回答,例如,++运算符的行为。非正式地说,我们用简单的英语描述操作符。例如:

如果
x
int
类型的变量,
++x
会使x增加1

(我假设没有整数溢出,并且
++x
不返回任何内容)

在形式语义中(我将使用操作语义),我们需要做一些工作。首先,我们需要定义类型的概念。在本例中,我将假设所有变量的类型都是
int
。在这种简单的语言中,程序的当前状态可以用存储来描述,存储是从变量到值的映射。例如,在程序中的某个点,
x
可能等于42,而
y
则等于-5351。存储可以用作函数——例如,如果存储
s
的变量
x
的值为42,则
s(x)=42

程序的当前状态中还包括我们必须执行的程序的其余语句。我们可以将其打包为
,其中
C
是剩余的程序,
s
是存储

因此,如果我们有状态
42,y->-5351}>
,这是一种非正式的状态,在这种状态下,唯一要执行的剩余命令是
++x
,变量
x
的值为42,变量
y
的值为
-5351

然后我们可以定义从程序的一种状态到另一种状态的转换——我们描述了当我们在程序中执行下一步时会发生什么。因此,对于
++
,我们可以定义以下语义:

<++x, s> --> <skip, s{x -> (s(x) + 1)>
希望这能给你一个想法。注意,这只是形式语义学的一个例子——除了操作语义学,还有公理语义学(通常使用霍尔逻辑)和指称语义学,可能还有很多我不熟悉的语义学


正如我在对另一个答案的评论中提到的,形式语义的一个优点是,您可以使用它们来证明程序的某些属性,例如它终止。除了显示您的程序没有表现出不良行为(例如不终止),您还可以通过证明您的程序符合给定规范来证明您的程序的行为符合要求。话虽如此,我从未发现指定和验证程序的想法如此令人信服,因为我发现该规范通常只是用逻辑重写的程序,因此该规范同样可能存在缺陷。

就像语言的语法可以用形式语法(例如)来描述一样,可以使用不同的形式将语法映射到数学对象(即语法的含义)

from很好地介绍了[指称]语义与语法的关系。本书的开头还简要介绍了形式语义学的其他非指称方法(尽管维基百科链接提供了更详细的信息,并且可能更为最新)

发件人:

语义的模型还没有建立 与BNF相同程度地受到关注 它的后代在语法上也有不同的定义。 这可能是因为语义确实如此 似乎只是简单地比 语法。最成功的系统是 指称语义学 在命令行中找到的所有功能 编程语言,并具有良好的性能 数学基础。(还有 积极研究类型系统和 并行编程)许多 外延定义可以是 作为口译员执行或翻译 进入“编译器”,但这还没有 导致发电机的高效运行 这可能是另一个原因 指称语义学是比较少的 比BNF更受欢迎


在像Giotto这样的编程语言的上下文中,这意味着具有形式语义的语言对其单个语言结构具有严格的数学解释

当今大多数编程语言都没有严格定义。它们可能遵循相当详细的标准文档,但最终编译器的责任是生成某种程度上遵循这些标准文档的代码

另一方面,当需要使用模型检查或定理证明等方法对程序代码进行推理时,通常使用正式指定的语言。适用于这些技术的语言往往是函数语言,如ML或Haskell,因为它们是使用数学函数和它们之间的转换来定义的;这就是数学的基础

另一方面,P> C或C++是由技术描述非正式定义的,Altho。
<++x, {x -> 42, y -> -5351}> --> <skip, {x -> 43, y -> -5351}>