LLVM_2015

LLVM_2015

# 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
 $ vim hello.c
  • ソースコード1
1
2
3
4
int main (){
 puts ("Hello , World");
 return 0;
}
  • ソースコード2
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
(lldb) r
  • 行を表示
1
(lldb) l
  • 関数に入る、関数がなければ次の処理へ
1
(lldb) s
  • 次のブレイクポイントまで移動
1
(lldb) c
  • 次の行へ(関数があっても無視される)
1
(lldb) n
  • step時にupするとstepする前に戻れる
1
(lldb) up
  • upの逆
1
(lldb) down
  • どこの階層に来ているのかを確認
1
(lldb) bt
  • 変数の中身を表示
1
(lldb) p
  • 関数の終了
1
(lldb) fin
  • lldbの終了
1
(lldb) q

1.はじめにconsumetokenにブレイクポイントを置く(文字の切れ目を探す) cosumetokenで解析する

1
 (lldb) b ConsumeToken

FormTokenWithChars(Token &Result, const char *TokEnd,

12/11———————–

# 2日目

  • Parser.h
1
CodeGenAction→コード生成.IRか通常のファイルかで変わる
  • ConsumeToken
1
2
3
isTokenSpecial→文字なのか,記号なのかどうか
intとかキーワードを判断
TokのKindにキーワードの種類が入っている
  • Lexer
1
2
3
4
字句解析.
   1文字づつ読んでいく.
FormTokenWithChars
   Tokenの長さ,場所,種類をLex(のResult)に格納しておく
  • ParserFunctionDeclarator
1
Declaratorは宣言?
  • PaserExpression
1
2
3
+などの計算式が現れたら計算の優先順位に合わせて計算する
Precが優先順位を表す
   PaeseCastExpression
1
2
ActOnIdExpression
   変数の意味(中身)を調べる
  • PaseCastExpression
1
2
3
cast-expression, unary-expression, postfix-expression, primary-expressionを操作する
それぞれの種類に応じて処理を変える
IIにIdentifier Infoがある
  • Validator
  • ActOnIdExpression
1
2
3
LookUpResult
  変数が何かを調べる.何度も最適化が行われている.
      SemaLookUp
  • ActOnNumericConstant
  • getLanOpts
  • ActOnIdExpression
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy