09/12/27 19:33:59
言語Lのコンパイラを言語Lで実装するにはブートストラッピングをしますが、
それをできるだけ原始的なレベルからやってみようと思います。
自分が実装するので、突っ込みお願いします。
コンパイラの勉強が主目的で、面白い言語を作ることは目的ではありません。
具体的には>>2
2:デフォルトの名無しさん
09/12/27 19:37:11
使用ツール: エディタ・アセンブラ・リンカのみ
手順:
1. アセンブラでLのものすごく小さなサブセット言語L1のコンパイラを作る
2. L1でL1のコンパイラを作る
3. L1で少しだけ多機能なL2言語のコンパイラを作る (これを繰り返す)
(オプショナルな目標)
4. どっかの段階でlex/yaccに相当するものをLで作る
3:デフォルトの名無しさん
09/12/27 19:42:14
×: 3. L1で少しだけ多機能なL2言語のコンパイラを作る (これを繰り返す)
○: 3. Lnで少しだけ多機能なLn+1言語のコンパイラを作る (これを繰り返す)
4:1
09/12/28 00:00:09
誰も見てないかもですが・・・
一番最初のコンパイラの方針を考えました。
アセンブラで作るのでめちゃめちゃ簡単な言語(ほぼアセンブリ言語)にします。
- 標準入力からコード入力 → アセンブリ言語にコンパイル → 標準出力に出力
- リンカは手動で実行することにする
- 制御構造はifとgotoのみ
- 整数型のみ
- ハッシュテーブルがまだ無いので、識別子はx0,x1,…:レジスタ変数,y0,y1,・・・自動変数.の形式のみ。
- 関数は実装する
- 再帰下降型でパース
5:デフォルトの名無しさん
09/12/28 00:12:29
具体的な対象CPUやOSが書いてないよね
6:1
09/12/28 00:26:48
>>5
CPU:x86系
OS:Linux
でやります。
今自分が使ってるのは
OS : Linux version 2.6.18-6-686 (Debian)
as/ld: 2.17
です。
7:デフォルトの名無しさん
09/12/28 00:32:19
それあとほぼあらゆる問題が「GCCのソース見ろ」で終わりそうですね
8:デフォルトの名無しさん
09/12/28 00:32:58
期待する
9:1
09/12/28 00:59:27
>>7
読むだけより作った方が勉強になることもあるかと思いますので。
githubに空のリポジトリ作りました。
URLリンク(github.com)
開発コードはgrowl(growing language)です。
明日からちょびちょび頑張って作っていきますので応援よろしくお願いします。
10:デフォルトの名無しさん
09/12/28 09:09:20
GCC のソースを見るなんて筋が悪すぎる
11:デフォルトの名無しさん
09/12/28 10:14:15
そう言えば、GCCは自由を守るために、わざとおかしな造りにしてるって聞いたことがあった気がする
12:デフォルトの名無しさん
09/12/28 10:21:12
それでもっと自由な LLVM に置き換えられる訳か…