Answers:
小步语义定义了一种在一个计算步骤中一次评估表达式的方法。从形式上来说,表达语言的一个小步语义是一个关系称为归约关系。小步语义详细描述了表达式所发生的事情。它可以给出无限链的精确描述,甚至是非终止程序。终止程序是这样的程序,即以值终止,使得终止。 \ newcommand {\ llbracket} {[\![} \ newcommand {\ rrbracket} {] \!]}
在另一端是指称语义。指称语义为每个表达式分配一个“含义”。它是一个从表达式到的函数:(称为域)。表示符号的空间可能与语法空间完全无关,例如可以是计算为数字的表达式,可以是一组数字,例如或。
大步语义在中间。表达式语言和一组值上的一大步语义是关系。它将表达式与它的值相关(如果语言是不确定的,则可能有多个值)。通常,特殊值用于非终止表达式。
那么为什么我们有这三个概念呢?所有这些概念都可以相互建模,但是模型增加了一定程度的复杂性。
从操作上来说,小步语义相当于查看解释器针对该语言执行的每个操作。大步语义只看结果值。指称语义是一种数学解释,它可能与计算机上发生的事情有关,也可能没有关系。
小步语义是最明显的一种。显然,它提供了有关非终止程序的有用信息。更一般而言,它提供有关程序行为的详细信息。
指称语义将句法构造转换为任意数学对象;它可以表达科学家想要的任何内容(您可以将表达式的定义定义为表达式中所有可能的归约链),但要付出一定程度的复杂性。当我们确实想抽象一些细节(例如精确计算表达式的方式)时使用它。
大步语义在中间:它抽象了评估的细节,但保留了结果的句法性质。通常,当存在底层的小步语义时,使用该概念,以简洁地表示“以“ ”的形式。在这样的结构中,尽管概念非常不同(一个概念使我们可以谈论各个计算步骤和非终止程序,而另一个则不能),但是定义看起来非常相似,因为在这种情况下,定义大步语义基本上具有以下形式:“如果和…以及和是一个值,然后是 ”。
3
在((2+1)+1)⇓3
我猜“指称”是一些最终所有的价值,但在什么情况下会“大步”并不一定直接映射到了吗?区别是否与上下文有关,例如(a + 1)
取决于所包含的环境a
?
3