#
LLVMインストール方法
1
2
3
4
5
6
|
$ git clone http://llvm.org/git/llvm.git
$ cd llvm
$ mkdir build && cd build
$ (インストール場所)/configure --prefix=$PWD --disable-optimized --enable-debug-runtime\
$ --enable-debug-symbols --enable-assertions
$ make -j2 (jは並列、失敗したらmakeで)
|
#
brewでのインストール方法(読み会用mini版)
- brewが入っていなければbrewをインストール。
1
|
$ brew install ie-developers/ie/llvm_original`
|
#
hello.cを作成
1
2
3
4
|
int main (){
puts ("Hello , World");
return 0;
}
|
1
2
3
|
int main(int ac , char *av[]){
return 55+ac;
}
|
#
lldbを起動
1
|
$ lldb -- (インストールした場所)/Debug+Asserts/bin/clang -cc1 -S hello.c
|
#
ldbの利用方法
1
|
(lldb) b (行数、または関数名や変数名など)
|
1.はじめにconsumetokenにブレイクポイントを置く(文字の切れ目を探す)
cosumetokenで解析する
FormTokenWithChars(Token &Result, const char *TokEnd,
12/11———————–
#
2日目
1
|
CodeGenAction→コード生成.IRか通常のファイルかで変わる
|
1
2
3
|
isTokenSpecial→文字なのか,記号なのかどうか
intとかキーワードを判断
TokのKindにキーワードの種類が入っている
|
1
2
3
4
|
字句解析.
1文字づつ読んでいく.
FormTokenWithChars
Tokenの長さ,場所,種類をLex(のResult)に格納しておく
|
1
2
3
|
+などの計算式が現れたら計算の優先順位に合わせて計算する
Precが優先順位を表す
PaeseCastExpression
|
1
2
|
ActOnIdExpression
変数の意味(中身)を調べる
|
1
2
3
|
cast-expression, unary-expression, postfix-expression, primary-expressionを操作する
それぞれの種類に応じて処理を変える
IIにIdentifier Infoがある
|
- Validator
- ActOnIdExpression
1
2
3
|
LookUpResult
変数が何かを調べる.何度も最適化が行われている.
SemaLookUp
|
- ActOnNumericConstant
- getLanOpts
- ActOnIdExpression