1

これらの本を読んだ後、

バートランド・マイヤー、プログラミング言語理論の紹介 &

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 に答える