# HG changeset patch # User Kaito Tokumori # Date 1400081920 -32400 # Node ID f2b3fa53dce336a0665563895c386b16f7235002 # Parent f41ff679fd310e0241c4044635611f0d1ec40e98 aa diff -r f41ff679fd31 -r f2b3fa53dce3 presen/slide/s6/blank.css.less --- a/presen/slide/s6/blank.css.less Tue May 13 13:13:30 2014 +0900 +++ b/presen/slide/s6/blank.css.less Thu May 15 00:38:40 2014 +0900 @@ -69,7 +69,7 @@ .step { color: @color-step-hidden; } // or hide next steps e.g. .step { visibility: hidden; } } - +div.highlight {background-color:@background-color-code; display: inline-block; _display: inline;} div > ul { list-style-type: square; font-size: @font-size-list;} li { margin-bottom: 15px;} diff -r f41ff679fd31 -r f2b3fa53dce3 presen/slide/s6/fig/clangAST_char.svg --- a/presen/slide/s6/fig/clangAST_char.svg Tue May 13 13:13:30 2014 +0900 +++ b/presen/slide/s6/fig/clangAST_char.svg Thu May 15 00:38:40 2014 +0900 @@ -1,1850 +1,1218 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + diff -r f41ff679fd31 -r f2b3fa53dce3 presen/slide/s6/presen.html --- a/presen/slide/s6/presen.html Tue May 13 13:13:30 2014 +0900 +++ b/presen/slide/s6/presen.html Thu May 15 00:38:40 2014 +0900 @@ -113,16 +113,27 @@
+

研究背景

+ +
+ +

研究目的

@@ -141,35 +152,28 @@

Continuation based C

- +

階乗を計算する CbC プログラム

CbC プログラムの例

-__code print_factorial(int prod)
-{
-  printf("factorial = %d\n",prod);
-  exit(0);
+
__code code1(int n,__code(*exit_code)(int,void *),void *exit_env){ + printf("code1 : code entry1\n"); + goto exit_code(n,exit_env); +}
+ +int caller(){ + printf("caller : main1 entry\n"); + __code (*__ret)(int, void *) = __return; + struct __CbC_env *__env = __environment; + goto code1(1, __ret, __env); + return 0; } -__code factorial0(int prod, int x) -{ - if ( x >= 1) { - goto factorial0(prod*x, x-1); - }else{ - goto print_factorial(prod); - } -} - -__code factorial(int x) -{ - goto factorial0(1, x); -} - -int main(int argc, char **argv) -{ - int i; - i = atoi(argv[1]); - goto factorial(i); -}
+int main(){ + int n; + n = caller(); + printf("return = %d\n",n); + return 0; +}
  • code segment は型に __code を使うことで宣言できる. @@ -184,7 +188,7 @@
    • LLVM はコンパイラ, ツールチェーン技術などを開発するプロジェクトの名称.
    • 単に LLVM といった場合には LLVM Core を指し, これはコンパイラの基板となるライブラリの集合. -
    • LLVM IR, LLVM BitCode と呼ばれる独自の言語を持つ. +
    • LLVM IR と呼ばれる独自の言語を持つ.
    • clang はバックエンドに LLVM を利用する C/C++/Objective-C コンパイラ.
    @@ -238,6 +242,7 @@

+

内部表現には手を加えていない.

CbC コンパイラの実装に深く関わる内部表現である AST についてさらに触れる.

@@ -255,20 +260,19 @@
-int main(){
-  int a;
-  a = func(1,2);
-  return a;
+__code code1(int n,__code(*exit_code)(int,void *),void *exit_env){
+  printf("code1 : code entry1\n");
+  goto exit_code(n,exit_env);
 }
 
- +

CbC の文に対してこの木が正しく生成されるようにソースコードに手を加えていく.

-

CbC コンパイラの実装

+

clang/LLVM 上での CbC コンパイラの実装