# HG changeset patch # User Kaito Tokumori # Date 1425551616 -32400 # Node ID b9fe222159006ad77234bb55ac2ed5126631f549 # Parent ddc8ec20ed6e5c0da941c02830de37e5b2a352e3 update slide diff -r ddc8ec20ed6e -r b9fe22215900 s6/2015_03_03.html --- a/s6/2015_03_03.html Tue Mar 03 18:20:35 2015 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ - - - - - Presen - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
- - - -
- - - - - - - -
-

CbCにおけるコードセグメントのプロトタイプの自動生成

-
- Kaito Tokumori - -
-
-
- -
-

研究目的

-

当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案しており、その手法を用いてプログラミングを行う言語として"CbC"の開発を行っている。

-

CbCにおいてコードセグメントは処理の単位に相当し、データセグメントはその対象となるデータの単位となる。

-

データセグメントは C の構造体のように複数のデータ型の値を持つことができ、後から拡張することが可能である。また、構造を示すシグネチャを持ち、それを参照することで異なるバージョンのプログラム間でも正しく動作することが可能になる。

-
- -
-

今週やったこと

-
    -
  • コードセグメントのプロトタイプ宣言を自動生成する手法の考案 -
-
- -
-

前提条件

-
    -
  • プロトタイプ宣言の自動生成はコードセグメントに対してのみ行う。 -
  • プロトタイプ宣言を自分で書くことも許す。 -
  • 定義が見つからなかった場合は何もせず、エラー出力はclang/LLVMに任せる。 -
-
- -
-

Plan A : 構文解析中にプロトタイプ宣言の自動生成を行う

-
    -
  1. プロトタイプ宣言のないコードセグメントへの継続を発見次第その定義を検索 -
  2. 定義に基づいてプロトタイプ宣言の自動生成 -
-

利点

-
    -
  • プログラマが書いたプロトタイプ宣言との衝突を気にしなくて良い -
  • 引数に構造体を含む場合にその定義を気にしなくて良い -
-

欠点

-
    -
  • 自動生成を行う度に全体を検索することになる -
-
- -

Plan B : 最初にファイル全体を読んで自動生成を行う

-
    -
  1. 構文解析前にファイル全体を読み込む -
  2. 構造体の定義を解析 -
  3. コードセグメントの定義からプロトタイプ宣言の生成 -
-

利点

- -

欠点

- -
- -
- -
- - - - diff -r ddc8ec20ed6e -r b9fe22215900 s6/2015_03_10.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/s6/2015_03_10.html Thu Mar 05 19:33:36 2015 +0900 @@ -0,0 +1,176 @@ + + + + + Presen + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + +
+ + + + + + + +
+

CbCにおけるコードセグメントのプロトタイプの自動生成

+
+ Kaito Tokumori + +
+
+
+ +
+

研究目的

+

当研究室ではプログラムをコードセグメント、データセグメントという単位を用いて書くという手法を提案しており、その手法を用いてプログラミングを行う言語として"CbC"の開発を行っている。

+

CbCにおいてコードセグメントは処理の単位に相当し、データセグメントはその対象となるデータの単位となる。これによって、各処理がどのデータに依存するかがわかり、それに応じてスケジューリングすることが可能となる。

+

データセグメントは C の構造体のように複数のデータ型の値を持つことができ、後から拡張することが可能である。また、構造を示すシグネチャを持ち、それを参照することで異なるバージョンのプログラム間でも正しく動作することが可能になる。

+
+ +
+

今週先週で考えてきたこと

+
    +
  • コードセグメントのプロトタイプ宣言を自動生成する手法について +
+
+ +
+

前提条件

+
    +
  • プロトタイプ宣言の自動生成はコードセグメントに対してのみ行う。 +
  • プロトタイプ宣言を自分で書くことも許す。 +
  • 定義が見つからなかった場合は何もせず、エラー出力はclang/LLVMに任せる。 +
+
+ +
+

Plan A : 構文解析中にプロトタイプ宣言の自動生成を行う

+
    +
  1. プロトタイプ宣言のないコードセグメントへの継続を発見次第その定義を検索 +
  2. 定義に基づいてプロトタイプ宣言の自動生成 +
+

利点

+
    +
  • プログラマが書いたプロトタイプ宣言との衝突を気にしなくて良い +
  • 引数に構造体を含む場合にその定義を気にしなくて良い +
+

欠点

+
    +
  • 自動生成を行う度に全体を検索することになる +
+
+ +
+

Plan B : 最初にファイル全体を読んで自動生成を行う

+
    +
  1. 構文解析前にファイル全体を読み込む +
  2. 構造体の定義を解析 +
  3. コードセグメントの定義からプロトタイプ宣言の生成 +
+

利点

+
    +
  • 最初に一度読むだけで良い +
+

欠点

+
    +
  • プログラマがかいたプロトタイプ宣言との衝突を避ける必要がある +
  • 構造体の定義の先読みも行う必要がある +
  • Plan Aと比較すると実装が難しいかも +
+
+ +
+
    +
  • 最初に全体を読み込むのが良い +
      +
    • コードセグメントが大量に定義されることを考えるとその都度その都度探しに行くのは手間 +
    • Aに比べると時間がかかるというだけでBも大して難しくはないはず +
    +
+
+ +
+

こういう手順でいけるはず

+
    +
  • パーサーがファイルを開く度に先に解析を始める +
  • グローバル領域の構造体宣言を解析する +
      +
    • 何らかの方法で二度宣言されないようにしないといけない +
    +
  • __codeを目印にプロトタイプを生成する +
      +
    • プロトタイプ宣言ならそのまま解析 +
    • そうじゃないなら内部で置き換えて解析 +
    +
  • 事前解析を終えたら通常の構文解析に移る +
  • 解析済み構造体に当たった場合は何らかの形でそれを無視 +
  • コードセグメントのプロトタイプに当たった時はそれは解析済みなのでStatementを破棄して飛ばす +
+
+ +
+ +