1

看完这些书

Bertrand Meyer,《编程语言理论导论》和

JD Ullman,ML 编程元素

我也读过一些论文,也试图在谷歌上找到,但我仍然不明白这个概念。“作为快速原型的功能语言中的可执行语言语义规范”

我有一些问题..我不明白某些行的含义,我也有一些问题..这是什么意思,什么是“可执行规范”

(1) SML中的可执行语言语义规范作为语言实现的快速原型

(2) 可执行规范如何用于快速原型设计

(3) 指称语义为可用架构/机器上的命令式编程语言的实现提供了“神谕”。

4

1 回答 1

1

我真的只是在猜测,因为我没有读过你所说的书,但我怀疑它是指将某些语言的语义编码为一组 SML 函数的做法。这提供了一种在可执行设置中使用语言语义的快速简便的方法,而无需实现所有混乱的前端和后端编译器或解释器工件。例如:

datatype value = Int of int
               | String of string

datatype ast = Seq of ast * ast
             | Print of ast
             | Value of value
             | Assign of string * ast
             | Variable of string

fun value_printer (Int i) = print (Int.toString i)
  | value_printer (String s) = print s

fun execute env (Seq (a, b)) = (execute env a; execute env b)
  | execute env (Print a) = value_printer (execute env a)
  | execute env (Value _) = ()
  | execute env (Assign (s, a)) = ...
    etc, etc.

您基本上定义了一个数据类型来表示您的抽象语法树,然后定义一个对该 AST 执行重写的函数(或将 AST 子树value简化为表示您的语言中的值的某些数据类型)。

如果该execute函数看起来有点熟悉,那是因为它类似于您可能在教科书中看到的更传统的语义定义,只是有一些有趣的语法。

您可以想象我们可以在此设置中尝试构建类型检查器、静态分析或优化,而无需离开我们的“快速原型设计”环境(恰好是 SML)。SML 非常适合这类任务,这就是(我认为)您读过的书籍建议使用这种方法的原因。

于 2013-05-14T04:24:26.610 回答