209)『コンパイラ』を読む(1)
エイホ、セシィ、ウマルマンの『コンパイラ』(第1版、サイエンス社、1990年)を読み始めたので、そのメモ。ブログタイトルにナンバリングを付けたが、数年かけて読もうと思っているので、(2)はいつになるか分からない。ちなみに、読んでいるのは第1版で、2009年に出た第2版は、javaの話が多くなっているらしい
第1章の「概説」を読んだ。コンパイルは、前処理系>コンパイラ>アセンブラ>ローダー/リンク、という手順で行われることはなんとなく知っていたが、前処理系以外は具体的に何をしているのか知らなかった。また、エディタの自動インデントや補完機能、シンタックスハイライトなどもコンパイルの仕事だということも知った。
コンパイラの最終的な目的は、CやFortranなどで記述された原始言語を目的言語、たとえばアセンブラや機械語などのに等価で翻訳することである。ところで、コンパイ「ラ」とコンパイ「ル」、類似した2つの用語がでてきた。コンパイラは、前述した原始言語を目的言語に翻訳するプログラムを指し、コンパイルはそれに加えて前処理や複数のファイルを1つにまとめるリンクなども含んだ一連の処理を指している。
コンパイラのフェーズは、フロントエンドとバックエンドの2つのグループに大別される。フロントエンドは、CやFortranといった原始プログラムに依存する処理で、字句解析、構文解析、意味解析、そして中間コード生成を行う。一方、バックエンドは、中間コードに依存する処理で、コード最適化、コード生成を行う。さらに、全処理工程を通して、誤り処理ルーチンと記号表管理ルーチンが行われる。
『コンパイラ』の本文は日本語のみで記述されていて、原語ではなんと読むのか分からない。しかし、索引には原語も掲載されていた。以下の対訳は、第1章で重要と思ったワードを選抜したものだ。
日本語 | English |
---|---|
原始プログラム | source program |
目的プログラム | object program |
字句解析 | lexical analysis |
構文解析 | syntax analysis |
意味解析 | semantic analysis |
中間コード | intermediate code |
誤り処理ルーチン | error handler |
記号表管理ルーチン | synbol-table manager |
構文木 | syntax tree |
2022-03-24