16
Semantics with Applications ( 章章 章 25 (2))

Semantics with Applications

Embed Size (px)

DESCRIPTION

Semantics with Applications. ( 2章5節 (2)). 変数の静的有効範囲. 変数に静的有効範囲を用いるために 状態 (s) を2つの写像に書き換える。 変数と location を結びつける変数の環境 (Env V ) それぞれの location に値を結びつける store. 変数環境 :変数を受け取り、 location の集合を返す. Store :下の要素( next は次の free location を持っている 特殊なトークン). 簡単にするために、 Loc = Z( 値 ) ということにする。. 変数の静的有効範囲. - PowerPoint PPT Presentation

Citation preview

Semantics with Applications

(2章5節 (2))

変数の静的有効範囲

変数に静的有効範囲を用いるために状態 (s) を2つの写像に書き換える。• 変数と location を結びつける変数の環境 (EnvV)• それぞれの location に値を結びつける store変数環境:変数を受け取り、 locationの集合を返す

Store :下の要素( next は次の free location を持っている特殊なトークン)

簡単にするために、 Loc = Z( 値 ) ということにする。

変数の静的有効範囲

• 状態 sを変数から値への単独の写像ではなく、 2つの写像 envv と sto に分けて、 s=sto envv

とする。変数 x の値を求めるには、 • x に関連づけられている位置 l = envv x を求め、• l に関連付けられている値 sto l を求める

変数 x に値を割り当てるには、 • x に関連づけられている位置 l = envv x を求め、• store を sto l = v となるように更新する

変数宣言の静的有効範囲規則

変数環境と store は変数宣言によって更新されるので、変数宣言のための transition system (   のところ)は次の形に修正される。

よって次のようになる。

変数の静的有効範囲のための環境更新

変数を静的な有効範囲にするために、procedure の環境を、 procedure 宣言時の変数の環境を持つように拡張する。

procedure の環境は今までのように procedure の宣言によって更新される。拡張した環境のための環境更新は以下の通り。

変数の静的有効範囲規則 (1)

命令文の transition system は次の形になる。

変数の静的有効範囲規則 (2)

変数の静的有効範囲規則 (3)

演習 2.42 表 2.8 の自然意味論を xが値3を持つ下で演

習 2.38 の階乗の命令文に適用しなさい。

演習 2.43 演習 2.39 の命令文を適用して、期待された結

果が与えられることを確かめなさい。

演習 2.44 while 言語の代わりの意味論が図 2.8 の ass(ns) 〜 while(ns)  の公理と規則によって定義された。  図2のそれとこの意味論の間の等価について考

察し、証明せよ。

演習 2.45 手続きが2つの call-by-value パラメータをとれる

ように手続きの宣言の構文を修正せよ。

  Dp ::= proc P ( x1 , x2) is S; Dp | ε S ::= … | call p (a1,a2)

 手続きの環境の要素は下の通りである。

Env p = Pname ⇨ Var × Var × Stm × Envv × Envp

 上に挙げた意味論をこの言語を処理するように修正せよ。特に procedure の呼び出しのための新しい規則を規定しなさい。一つは再帰でない procedure のために、もう一つは再帰の procudure のために。

 命令文を構成し、新しい規則をどうやって使うかを説明しなさい。

演習 2.46 今 Proc 言語と相互再帰を達成する仕事を考える。 この procedure 環境は次の要素で定義される。

Env p = Pname ⇨ Stm × Envv × Envp × Decp

これは envp p = ( S, env’v env’p, D*p) のとき   D*p は pとして同じブロックで作られた全ての proced

ure 環境を含む。 upd’p を次のように定義する。  

  upd’p (proc p is S; Dp , envv ,envp ,D*p )= upd’p(Dp, envv,envp[p|→(S,envv,envp,D*p)],D*p) upd’p(ε, envv,envp,D*p)=envp

演習 2.46( 続き ) 次に updp を次のように再定義する。  

upd’p(Dp, envv,envp) = upd’p (Dp, envv,envp,Dp)

Proc の意味論を同じブロックで定義された procudure 間で相互再帰を得るように修正しなさい。

あなた選んだ面白い命令文で新しい規則がどうやって使われるか明らかにしなさい。

( ヒント: [call(rec)cc] が変更する必要のある唯一の規則です。関数 updp が新しい [call(rec)cc] の定義に役立つかどうか考えなさい )

演習 2.47 次の free location を保持するために、 store よ

りむしろ変数環境を使うような意味論の変形を考えよう。

  まず、次の2つを仮定する。

Envv = Var U {next} → Loc Store = Loc → Z

sto envv で、はじめに envv を変数の locationを見つけるために使って、 sto をその location の値を見つけるのに使って求められる状態を表す。

演習 2.47 (続き)  図 2.7 の節を今置き換える。

Envv = Var∪{next} → Loc Store = Loc → Z

意味論の2つの変形の下で違った結果を計算する命令文を構成しなさい。適している状態から命令文を実行し、導出木を構成することによってあなたの主張が正しいことを証明しなさい。