comparison final_main/chapter4.tex @ 6:5b368e14bb64

update
author mir3636
date Tue, 14 Feb 2017 18:48:26 +0900
parents 6d00f6c9bb8a
children
comparison
equal deleted inserted replaced
5:a2e61c11df3c 6:5b368e14bb64
14 14
15 ここで、そのライブラリの中でもコンパイルに関連するものについて説明する。 15 ここで、そのライブラリの中でもコンパイルに関連するものについて説明する。
16 16
17 \begin{description} 17 \begin{description}
18 \item[libast]\mbox{}\\ 18 \item[libast]\mbox{}\\
19 Abstract Syntax Tree (AST) や C の型等をクラスとして利用できるようにしたライブラリ、AST の説明は後述する。% AST は ``-Xclang -ast-dump'' オプションを付加することで表示できる. 19 Abstract Syntax Tree (AST) や C の型等をクラスとして利用できるようにしたライブラリ。%、AST の説明は後述する。% AST は ``-Xclang -ast-dump'' オプションを付加することで表示できる.
20 \item[liblex]\mbox{}\\ 20 \item[liblex]\mbox{}\\
21 字句解析ライブラリ、マクロの展開等の前処理系も担当する。 21 字句解析ライブラリ、マクロの展開等の前処理系も担当する。
22 \item[libparse]\mbox{}\\ 22 \item[libparse]\mbox{}\\
23 構文解析ライブラリ、解析結果を元に後述する libsema を使用して AST を生成する。 23 構文解析ライブラリ、解析結果を元に後述する libsema を使用して AST を生成する。
24 \item[libsema]\mbox{}\\ 24 \item[libsema]\mbox{}\\
26 \item[libcodegen]\mbox{}\\ 26 \item[libcodegen]\mbox{}\\
27 コード生成ライブラリ。生成された AST を LLVM IR に変換する。 27 コード生成ライブラリ。生成された AST を LLVM IR に変換する。
28 \item[clang]\mbox{}\\ 28 \item[clang]\mbox{}\\
29 ドライバ、各ライブラリを用いて求められた処理を行う。 29 ドライバ、各ライブラリを用いて求められた処理を行う。
30 \end{description} 30 \end{description}
31
32 これを踏まえて clang が C のコードを LLVM IR に変換する処理について説明する。
33 clang が C のコードを LLVM IR に変換する処理の過程を簡潔に図示したものである。
34 以下の図 \ref{fig:clangProcess} は clang が C のコードを LLVM IR に変換する処理の過程を簡潔に図示したものである。
35 clang は C のソースコードを受け取るとまずその解析を libparser による parser を用いて行い、libsema を用いて 解析結果から AST を構築する。
36 そしてその AST を libcodegen を用いて LLVM IR に変換する。
37
38 %AST はソースコードの解析結果を保持したツリーである。
39 %AST は “-Xclang -ast-dump” というオプションを付加することで表示することもできる。
40
41 \begin{figure}[htpb]
42 \begin{center}
43 \scalebox{0.35}{\includegraphics{fig/clangProcess.pdf}}
44 \end{center}
45 \caption{clang の 処理過程}
46 \label{fig:clangProcess}
47 \end{figure}
31 48
32 \section{LLVM の基本構造} 49 \section{LLVM の基本構造}
33 LLVM は LLVM IR をターゲットのアセンブリ言語に直接的に変換を行うわけではない。 50 LLVM は LLVM IR をターゲットのアセンブリ言語に直接的に変換を行うわけではない。
34 LLVM では、最適化や中間表現の変換を何段階か行う。 51 LLVM では、最適化や中間表現の変換を何段階か行う。
35 この変換を行う処理は全て pass が行う。 52 この変換を行う処理は全て pass が行う。