メタ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
プログラマーができることは、メタでできる
*目次 [#w23afd46]
#contents
*趣旨 [#h2c82c7a]
メタプログラミングに関する考察をメモする
*情報にはレベルがある [#t4cc350d]
単語の羅列
・
・
・
知識
知恵
メタプログラミングは
知恵をアクセス可能な状態にすることを目標にしなければなら...
*インテンションプログラミング [#w842102a]
*CiSE [#j5e6b0d9]
C In S-Expression
**本物のマクロ”でCのコード行数を半分に! [#y020f90e]
テキスト形式
http://ll.jus.or.jp/2009/slide/beforeafter/lltv-beforeaft...
プレゼンのリポート形式
http://www.atmarkit.co.jp/news/200909/07/lltv02.html
***考察 [#n37efef8]
これは、数年前、研究段階だと発表された記事で、その後どう...
でも、インテンショナルプログラミングをするためのヒントが...
それはなにかというと、インテンショナルプログラミングのwik...
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%86%...
のなかに、
「1 から 10 までの数を表示する」と意図を記述すると、下記...
for (int i = 1; i <= 10; i++) {
System.out.println("the number is " + i);
}
この記事と、本物のマクロ”でCのコード行数を半分に!で紹介...
抜粋すると
int i;
:
for (i = 0; i < (int)clen; i++)
putchar((unsigned char)s[i]);
for (int i = [0..clen]) { putchar(...) } とか書けたらなあ
である。これは、C言語の無駄な記述をとらえたものである。
ちなみに、シモニー氏の記述は
<<print the numbers 1 to 10>>
である。
forすらない、シンプルな記述だ。
チャールズシモニーは、意図をコードに展開するというアプロ...
そして、これはLisp系のマクロ(本物のマクロと称している)...
なかなかいいアプローチだとおもう、1対1に対応する、S式の...
問題はS式表現風に元のコードを解析し、逆にS式を対象とするC...
*Haskell [#y1894caa]
岡田さん(NTTデータ)からは、「Cobol meets Haskell」と題...
とういう記事があった。
http://www.infoq.com/jp/articles/FunctionalProgramming_20...
Haskellは構文解析ツールStrafunskiの利用と相俟って言語処理...
これは、マクロを使う組み合わせだから、ちょっと調べてみた...
*Strafunski [#ta75133f]
ポルトガル語のページはあった
http://www.slideshare.net/UlissesCosta/static-code-analyz...
**関係しそうなツールのページ [#fb160297]
http://www.meta-environment.org/
**2013年11月22日に講演会があるみたい [#id74cb80]
http://pop.msi.co.jp/userconf/2013/index.html
***すでに講演された記事を発見 [#q91d870a]
http://d.hatena.ne.jp/hiratara/20110917/1316220155
ああ、TERASOLUNAでだすのか。。。
http://www.zipc.com/event/uc/18th_files2/01-tomiyasu.pdf
*処理の流れ [#te027e65]
前処理 : コメントの削除など。
sglr : 構文解析。解析する言語ごとのSDFファイルを作る。
Strafunski : Haskell で扱えるようなデータにする。ただし、...
抽象構文木変換 : 言語非依存の木にする
解析変換 : 成果物の形にする
解析変換では構文木をルールで変換
変数名を日本語台帳で日本語にする。
記述順から処理順に変換する
論理式や算術式を簡約にする
Strafunski にて探索を行う
**Parsing Lisp into C++ [#rd8b7611]
ネットでも同様のことをしようとしたと思われる人が、ANTLRを...
***URL [#hc882cb7]
http://antlr.1301665.n2.nabble.com/Parsing-Lisp-into-C-td...
***コード [#wff0acc4]
Input:
(defun foo (x y) (progn (+ x 1) (+ y 1)))
Grammar:
program: (sexpr)* -> ^(PROGRAM sexpr*);
sexpr: QT?(list|atom) ;
list: '(' ')' | '(' members ')' -> ^(LIST member...
members: (sexpr)+;
atom: OPERATOR | ID | num | STRING ;
num : (n=INT|n=FLOAT) -> ^(NUM $n);
AST Output:
PROGRAM
LIST
defun
foo
LIST
x
y
LIST
progn
LIST
+
x
1
LIST
+
y
1
Desired Output:
PROGRAM
FUNCTION
foo
ARGS
x
y
BLOCK
+
x
1
+
y
1
終了行:
プログラマーができることは、メタでできる
*目次 [#w23afd46]
#contents
*趣旨 [#h2c82c7a]
メタプログラミングに関する考察をメモする
*情報にはレベルがある [#t4cc350d]
単語の羅列
・
・
・
知識
知恵
メタプログラミングは
知恵をアクセス可能な状態にすることを目標にしなければなら...
*インテンションプログラミング [#w842102a]
*CiSE [#j5e6b0d9]
C In S-Expression
**本物のマクロ”でCのコード行数を半分に! [#y020f90e]
テキスト形式
http://ll.jus.or.jp/2009/slide/beforeafter/lltv-beforeaft...
プレゼンのリポート形式
http://www.atmarkit.co.jp/news/200909/07/lltv02.html
***考察 [#n37efef8]
これは、数年前、研究段階だと発表された記事で、その後どう...
でも、インテンショナルプログラミングをするためのヒントが...
それはなにかというと、インテンショナルプログラミングのwik...
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%86%...
のなかに、
「1 から 10 までの数を表示する」と意図を記述すると、下記...
for (int i = 1; i <= 10; i++) {
System.out.println("the number is " + i);
}
この記事と、本物のマクロ”でCのコード行数を半分に!で紹介...
抜粋すると
int i;
:
for (i = 0; i < (int)clen; i++)
putchar((unsigned char)s[i]);
for (int i = [0..clen]) { putchar(...) } とか書けたらなあ
である。これは、C言語の無駄な記述をとらえたものである。
ちなみに、シモニー氏の記述は
<<print the numbers 1 to 10>>
である。
forすらない、シンプルな記述だ。
チャールズシモニーは、意図をコードに展開するというアプロ...
そして、これはLisp系のマクロ(本物のマクロと称している)...
なかなかいいアプローチだとおもう、1対1に対応する、S式の...
問題はS式表現風に元のコードを解析し、逆にS式を対象とするC...
*Haskell [#y1894caa]
岡田さん(NTTデータ)からは、「Cobol meets Haskell」と題...
とういう記事があった。
http://www.infoq.com/jp/articles/FunctionalProgramming_20...
Haskellは構文解析ツールStrafunskiの利用と相俟って言語処理...
これは、マクロを使う組み合わせだから、ちょっと調べてみた...
*Strafunski [#ta75133f]
ポルトガル語のページはあった
http://www.slideshare.net/UlissesCosta/static-code-analyz...
**関係しそうなツールのページ [#fb160297]
http://www.meta-environment.org/
**2013年11月22日に講演会があるみたい [#id74cb80]
http://pop.msi.co.jp/userconf/2013/index.html
***すでに講演された記事を発見 [#q91d870a]
http://d.hatena.ne.jp/hiratara/20110917/1316220155
ああ、TERASOLUNAでだすのか。。。
http://www.zipc.com/event/uc/18th_files2/01-tomiyasu.pdf
*処理の流れ [#te027e65]
前処理 : コメントの削除など。
sglr : 構文解析。解析する言語ごとのSDFファイルを作る。
Strafunski : Haskell で扱えるようなデータにする。ただし、...
抽象構文木変換 : 言語非依存の木にする
解析変換 : 成果物の形にする
解析変換では構文木をルールで変換
変数名を日本語台帳で日本語にする。
記述順から処理順に変換する
論理式や算術式を簡約にする
Strafunski にて探索を行う
**Parsing Lisp into C++ [#rd8b7611]
ネットでも同様のことをしようとしたと思われる人が、ANTLRを...
***URL [#hc882cb7]
http://antlr.1301665.n2.nabble.com/Parsing-Lisp-into-C-td...
***コード [#wff0acc4]
Input:
(defun foo (x y) (progn (+ x 1) (+ y 1)))
Grammar:
program: (sexpr)* -> ^(PROGRAM sexpr*);
sexpr: QT?(list|atom) ;
list: '(' ')' | '(' members ')' -> ^(LIST member...
members: (sexpr)+;
atom: OPERATOR | ID | num | STRING ;
num : (n=INT|n=FLOAT) -> ^(NUM $n);
AST Output:
PROGRAM
LIST
defun
foo
LIST
x
y
LIST
progn
LIST
+
x
1
LIST
+
y
1
Desired Output:
PROGRAM
FUNCTION
foo
ARGS
x
y
BLOCK
+
x
1
+
y
1
ページ名: