Skip to content

Commit

Permalink
feat: コンパイラ
Browse files Browse the repository at this point in the history
  • Loading branch information
xhiroga committed Jul 21, 2024
1 parent e3f622f commit ee83f64
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions computer-science/programming-language-theory/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

## プログラミング言語の歴史

### LLVM

## コンパイラ

広義のコンパイラは、ソース言語で書かれたプログラムをターゲット言語のプログラムに変換するプログラムである。例えばC言語のプログラムは、GCCというコンパイラによって機械語に変換される。機械語はISAによって異なるので、コンパイラはオプションなどで対象のアーキテクチャを指定することができる。GCCの例は次の通り。
Expand Down Expand Up @@ -47,21 +45,27 @@ expression = a + b * c ** d
<!-- - Earley法
- LR(Left-to-right, Rightmost derivation)文法 -->

#### 式の評価
### 意味解析

### 中間表現

### 最適化

### コード生成

数式やプログラムを記述する方法として、次の3つが挙げられる。
構文木から機械語やVMコードへの変換を考える。機械語やVMコードは、基本的に動詞と目的語からなる。重要なのはその語順である。数式やプログラムを記述する方法として、次の3つが挙げられる。

- 前置記法 (ポーランド記法, PN, Polish notation)
- 中置記法 (infix notation, IN)
- 後置記法 (逆ポーランド記法, RPN, reverse Polish notation)

### 意味解析
機械語やVMコードでは後置記法を基に拡張した形式を用いられることが多い。

### 中間表現
### コンパイラ戦略

### 最適化
プログラムの実行にあたって、ソース言語を予め機械語に翻訳し、実行可能なバイナリファイルを生成することをAOTコンパイルという。一方で、プログラムの実行時にコンパイルする方式をJITコンパイルという。JITコンパイルの例としては、Rubyにおいて高速化を目的として有効化されるYJITや、JavaScriptの高速化のためにブラウザに搭載されたJITコンパイラ等がある。また、機械語へのコンパイラを用いずに、プログラムからVMコードを生成し、実行時にはVMがVMコードに対応する機械語を実行する戦略もあり、インタプリタ型と呼ばれる。

### コード生成
### LLVM

## 設計と実装

Expand Down

0 comments on commit ee83f64

Please sign in to comment.