可执行规范..?可执行规范如何用于快速原型设计?

时间:2013-05-12 00:50:19

标签: functional-programming sml rapid-prototyping

阅读这些书之后

  

Bertrand Meyer,编程语言理论导论&

     

J.D。 Ullman,ML编程元素

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

我有一些问题..我不理解某些行的含义,我也有一些问题......这是什么意思,什么是'可执行规范'

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

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

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

1 个答案:

答案 0 :(得分: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非常适合这些类型的任务,这是(我假设)为什么你读过的书建议这种方法。