View
35
Download
0
Category
Preview:
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
変数の静的有効範囲
変数に静的有効範囲を用いるために状態 (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 の宣言によって更新される。拡張した環境のための環境更新は以下の通り。
演習 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 の値を見つけるのに使って求められる状態を表す。
Recommended