• 検索結果がありません。

プログラミング言語処理系論 (4) Design and Implementation of Programming Language Processors

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング言語処理系論 (4) Design and Implementation of Programming Language Processors"

Copied!
25
0
0

読み込み中.... (全文を見る)

全文

(1)

プログラミング言語処理系論

Design and Implementation of

Programming Language Processors

問題集

佐藤周行

(情報基盤センター/電気系専攻融合情報学

(2)

レポート問題

 問題1-14のうち、任意の1題を選択して解答す ること  複数解答した場合は、各々採点します  提出締め切りは7/31  8月修了を予定している人は、締め切りと採点を早め ます。締め切りは7/22。メールでその旨報告してくだ さい  提出はmanaba上で行うこと。アカウントが必要 な場合は佐藤までメールをください  フィードバックがかかることがあります

(3)

(2)

 問題1 Javaの言語仕様を入手し、同様の解 析を行なってみよ。仕様はここ↓ http://docs.oracle.com/javase/specs/jls /se8/html/ Javaは、典型的なオブジェクト指向言語である。 オブジェクトを核として、パッケージ等、プログ ラム単位がどのように定義されているか観察 せよ。

(4)

 問題1’ Ecmascriptの言語仕様を入手し、 同様の解析を行なってみよ。

Ecmascriptは、Web Browserを実行環境と想 定するスクリプト言語である。言語のコンセプ トが何かを中心に、仕様書の構造を解析せよ

(5)

Rubyについて

 問題1’’ Rubyの言語仕様を入手し、同様の 解析を行なってみよ。JISが定められているが、 入手しやすい仕様はここ↓ http://www.ipa.go.jp/files/000011432.p df Rubyも典型的なオブジェクト指向言語である。こ こでは、FortranやJavaと比較して、言語の 定義がどの程度成熟しているか併せて観察せ よ

(6)
(7)

(4)

% bison –v dci.y

% cc –O dc.c dci.tab.c –o dci % ./dci … Bisonは、CYGWINをインストールすると、Windowsでも使えます Linux等、Unix系、Mac系ではbisonまたはyaccの名前で標準的に 使えます (問題3) skel.outputを解析し、どのような受理機械が生成されたか 述べよ。さらにlinesの定義の1行目が lines expr となっていて、 expr lines となっていない理由を受理機械の動作から説明せよ (学部の復習レベル)

(8)

(4) もっとおそろしい言語があってな

 Fortranのごく初期においては  関数呼び出しにおいて、関数コールごとの実行環境( フレーム)は関数ごとに固定  グローバルな変数は存在せず、EQUIVALENCE文で 関数コールごとに対応を指定  (問題4:考古学) Fortranの関数コールにおける フレームの作り方について調査せよ。Fortranは 、「再帰」を理解できないプログラマを大量に養成 したといわれる(半分デマ)が、実際Fortranでは 再帰が書けない。その理由をフレームの作り方と 関連付けて述べよ

(9)

(5)

 Perlの実行について (問題5) PerlのB::Conciseモジュールを利 用して、以下についてレポートせよ (1) 適当なプログラムに対してのソースとパー ス木の対応(-src)の観察 (2) 実行に際して必要となるデータ構造(ス タック、フレーム、ヒープ)の特定(myによる ローカル変数の扱いを観察すること) (3) ループ構造を必ず含むこと

(10)

 (問題6) 手近にあるコンパイラをひとつ対象にし、 calling conventionとフレームを解析せよ。この時 に 以下のことに注意せよ (1)コンパイラ・OS・CPUを明記すること (2)解析の手法を明らかにすること (3)calling conventionは、呼び出し側と呼び出さ れる側の約束であるが、そのときに呼び出される側 から呼び出し側へも約束が存在することに注意せよ

(11)

(6) 問題7

 自分で言語を定義してみよ

 仕様書を書け(これが一番大事)

 High Level Conceptは「新しい概念のない電卓であ

る」でもかまわない  ただし、変数は扱えるようにすること  関数コールをデザインすること  Lexical analysisに関係するコードは自分で書くこと  Parse したら、ASTは生成できるようにすること  評価系 (eval)は書かなくてもよいが…きっと書きたく なる。

(12)

(7)

 https://docs.oracle.com/javase/specs /jvms/se10/jvms10.pdf (2018)  (問題8)上のドキュメントを以下の観点から要 約せよ  VMの仮想機械としての構造  Javaの実行をサポートするためのフレーム管理、 メソッド呼び出し等、命令セットの特徴

(13)

13

(8)

 (問題8の追加課題)  breakdown JAVA VMの仕様を読み、以下の観点から整 理して特徴を記せ。 (1)VMの命令があつかうデータ (2)メモリ(スタックとヒープ)管理 (3)スレッド管理 (4)オブジェクト管理

(14)

 (問題8’)上のドキュメントを以下の観点から要 約せよ  CPython VMの仮想機械としての構造  Pythonの実行をサポートするためのフレーム管 理、メソッド呼び出し、ループ実行等の命令セット の特徴

(15)

(9)

 (問題8’への追加) CPythonのVMについて

JVMと同じことを解析せよ

 (問題8’’) ParrotについてJVMと同じことを解

(16)

(8) JVMで十分か?

 (問題9)次の論文のうち、どれかを読み、要約

せよ

1. JVM-hosted languages: they talk the talk, but do they walk the walk?

W. Li, D. White, J. Singer, PPPJ’13, 2013.

2. Characteristics of dynamic JVM languages

(17)

(9) 問題10

 Stack machineのVMを一つ設計せよ

 命令セットはDCC.zip中のopcode.hを使うこと

 stack segmentとdata segmentを定義するこ

と  各命令を実行したときのstack/data segment の状態変化を記述すること  OP_CALL とOP_RETURNについては詳述すること  この記述に従ってvmgenでVMを作成するとなおよ い  コンパイラを作る必要はない

(18)

(10)

 (問題11)以下の命令列に対してvalue numberingを行え。授業中で概説したアルゴ リズムを完成させよ。できるならばプログラム を書いてみよ。 g=x+y h=u-v i=x+y x=u-v u=g+h v=i+x w=u+v

(19)

 (問題11の続き)以下のコードを考える。

def f(a,b) {return ((a+b)+3)*(3+(b+a))};

 RTLは以下のようになるだろう add i0 i1 r2 mov 3 r3 add r2 r3 r4 mov 3 r5 add i1 i0 r6 add r5 r6 r7 mul r4 r7 r8 return r8  この時、value numberingを行え。rで始まる変数はこの後使用しな いという仮定を置くと、命令のいくつかを削除することができる。これを やってみよ。(dead code elimination)

(20)

問題

11の注意

 アルゴリズムをプログラムとして実装する必要 はない。(プログラムが正しく動けばなおよい) ただし  Commutativeな演算については考慮の対象と すること  Quantityに対して最終的に割り当てられる変数 名を決定するアルゴリズムを含むこと

 Dead code eliminationやredundant

assignment eliminationを行うアルゴリズムを 含むこと

(21)

(11) 問題12:プログラム

 以下の(疑似)プログラムを考える。 while () { if (S1) {S2}; while (S3) { while () { switch (S4) { case 0: continue; case 1: S5; break; default: S6; break; } if (S7) break; } switch (S8) { case 0: continue;

case 1: S9; goto Label; default: return S10; }

} Label: }

(22)

(問題

12続き)

次のデータ構造を考える

BB[1] = {succ = {2,3}, pred={9}} BB[2] = {succ = {3}, pred={1}} BB[3] = {succ = {4}, pred={1,2,4,8}} BB[4] = {succ={3,5,6},pred={3,7}} BB[5] = {succ={7}, pred={4}} BB[6] = {succ={7}, pred={4}} BB[7] = {succ={4,8},pred={5,6}} BB[8] = {succ={3,9,10}, pred={7}} BB[9] = {succ={1}, pred={8} BB[10] = {succ={}, pred={8}}

(23)

問題

12

(1) 前述のデータ構造が、SnがBB[n]に対応するフローグラフ になっていることを確認せよ。 (2) S1がentry pointであるとして、各ブロックのdominatorを 計算するアルゴリズムを設計せよ(プログラムまでは書く必 要がない)。さらに、それに従って、前ページのスライドにあ げたフローグラフの各ブロックのdominatorの集合を列挙 せよ。 (3) 上の結果を用いてdominator treeを計算するアルゴリズ ムを設計せよ(プログラムまでは書く必要がない)。さらに、 それに従って前ページのスライドにあげたフローグラフの dominator treeを計算せよ。 (4) backedgeをすべて挙げ(4個)、それに対応する(自然)ル ープ構造を元の疑似プログラム上で示せ。

(24)

(11)

 (問題13) 以下のコードについてglobal value numberingを行え。 以下の手続きを書けば、プロ グラムを書く必要はない。(プ ログラムを書けばなおよい)  各quantityについて reaching definitionを明 らかにすること  redundant code eliminationを行うこと。た だし、aからtは、このコード の後でも使用されうるとする  SSA変換をする必要はない が、しても構わない。

[a, b, c, d,i, m, s, t are given] while (x < 100) { if (x == i) { i = c × b; m = i + 4; a = c; } else { d = c; i = d × b; s = a × b; t = s + 1; } x = a × b; y = x + 1; } print i;

(25)

(11)

 (問題

14)GCCの最適化ルーチンではdf-core.c, df-problems.c, df-scan.cで一般 的なソルバーを提供している。このルーチン群 を解析し、それらを利用して実際にどのような 問題が解かれているか列挙せよ。そのうち、 reaching definitionを例にとり、gen, kill, out, inがどのように表現されているか記述せ よ。

参照

関連したドキュメント

問についてだが︑この間いに直接に答える前に確認しなけれ

2021] .さらに対応するプログラミング言語も作

共通点が多い 2 。そのようなことを考えあわせ ると、リードの因果論は結局、・ヒュームの因果

 

あれば、その逸脱に対しては N400 が惹起され、 ELAN や P600 は惹起しないと 考えられる。もし、シカの認可処理に統語的処理と意味的処理の両方が関わっ

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から

   手続内容(タスク)の鍵がかかっていること、反映日(完了日)に 日付が入っていることを確認する。また、登録したメールアドレ