# AsakusaReading Asakusaソースコードリーディング(第一回)

Asakusaソースコードリーディング(第一回)のハッシュタグまとめ。今回はコンパイラ編。
5
前へ 1 2 ・・ 5 次へ
@nsiena

早速助けて連れて上がっていただいた。感謝 >< #AsakusaReading

2011-05-25 18:59:15
@nsiena

『1. Ashigelコンパイラの内部構造』 : 途中から参加中。ソースコードを読む読む。 #AsakusaReading

2011-05-25 19:01:20
Hidenori nhide Nakamura @nhide

良かったです。ご不便かけてすみません。 RT @nsiena: 早速助けて連れて上がっていただいた。感謝 >< #AsakusaReading

2011-05-25 19:02:19
@nsiena

@nhide いえいえー。こちらの都合で遅くなってしまいましたので m(.. )m #AsakusaReading

2011-05-25 19:03:18
Yuri Odagiri @ixixi

Writableの実装の拡張もSPIでやってるのか。。。#AsakusaReading

2011-05-25 19:04:53
@nsiena

「ASG から Java のクラスを生成している。ソースコード生成。パース済みツリーを直接操作ができる仕組みは……? C# とか Ruby とかはどう? >> 会場」 #AsakusaReading

2011-05-25 19:05:46
@nsiena

「DMDLの設計は、データモデル系を中心に。拡張はSPI 経由。追加属性でデータモデルの表現を拡張。 #AsakusaReading

2011-05-25 19:07:12
marble @marblejenka

#AsakusaReading DMDLのコンパイルはふつうのコンパイラっぽい。

2011-05-25 19:08:31
@nsiena

.o(コンセントがたくさん用意されているのが、とてもありがたい。感謝して使わせていただこう。 #AsakusaReading

2011-05-25 19:08:36
marble @marblejenka

#AsakusaReading Javaの制約でメソッドをオブジェクト化できないので、演算子のオブジェクトを生成するFacrotyを生成している。

2011-05-25 19:09:36
@nsiena

「Operator DSL: コンパイラらしいことをしているのはここまで。 Java メソッドと注釈で、Flow DSL 向けの演算子ファクトリと、抽象クラスとして記述される演算子実装クラスを生成。構文解析 → いみ解析 → コード生成。 #AsakusaReading

2011-05-25 19:11:30
marble @marblejenka

#AsakusaReading ASTはjava.lang.model下のやつを使ってる。TypeElementとか。APT使うと簡単に取得できる。

2011-05-25 19:11:59
marble @marblejenka

#AsakusaReading ASGは自作。演算子メソッドの定義だけ持たせている。今の演算子は演算子同士の依存関係がないので、あまり難しいことはしていない。

2011-05-25 19:13:20
@nsiena

「javax.lang.model.element.TypeElement。型宣言モデルで、Java 上の参照の解決まで利用できる。Java 6 の注釈プロセッサを利用して、javac の注釈処理に介入。 #AsakusaReading

2011-05-25 19:14:11
@nsiena

「OperatorCompiler: SPI を使って OperatorProcessor を呼んで、演算子を処理している。演算子ごとに注釈を読んで、演算子の入出力やパラメータを取得。 #AsakusaReading

2011-05-25 19:18:46
@nsiena

「Q/A. eclipse から、コンパイルのたびに呼ばれている。コンパイラの設定の中に Ashigelc が加わっているのが分かる。エラーなども IDE に反映されるので、プログラマは意識せずに使える。 #AsakusaReading

2011-05-25 19:20:58
@nsiena

「構文解析: 注釈プロセッサで代用。ある特定の注釈が付いたメソッド一覧などを簡単に取り出せるので便利。 #AsakusaReading

2011-05-25 19:21:52
@nsiena

「意味解析: OperatorClassCllectorで、演算子プロセッサを add() すると、対応する演算子メソッドを裏で収集。全部追加したら collect() で ASG を構築。 #AsakusaReading

2011-05-25 19:25:39
@nsiena

「間違いに気付きにくくなるのを避けるために、演算子以外の public や static なメソッドを作れないようにしている。」 .o(いろいろ条件を満たすかチェックしているのが見て取れる #AsakusaReading

2011-05-25 19:26:23
@nsiena

「コード生成: OperatorClassEmitter: 入口。 OperatorFactoryClassGenerator: 演算子ごとに演算子プロセッサを実行し、結果を元に演算子ファクトリを生成。 #AsakusaReading

2011-05-25 19:29:25
前へ 1 2 ・・ 5 次へ