[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
さて、GREサブジェクトテストCS分野の問題、4問目はコンパイラがらみの問題でございます。
で、「そもそもコンパイラとは何ぞや?」ということからちょっと話し始めると、んーと、「プログラム」って言葉は、PCをいじってれば誰でもたいてい1度は聞いたことがあると思うんだけど(具体的に言えば、文書作成するやつとか、表計算するやつとか、ゲームとか、そういうのね)、このプログラムってやつは「プログラミング言語」って言葉(たとえば、C言語とかJavaとかLispとかね)で書かれてる。でも、このプログラミング言語、人間には分かりやすいんだけど、機械、つまりコンピュータにはとんと理解できない代物なんだよね。つーのも、突き詰めれば、コンピュータが理解できるのは、1か0か、つまり、電流が通ってるか通ってないかということしか分からないから。
そこで、プログラミング言語を「コンピュータにやさしい」かたち(これを「機械語」と言ったりする)に直す必要があるんだけど、その役目を担うのが「コンパイラ」というわけ。
コンパイラというのは、プログラミング言語(これをソースプログラムと言ったりする)を分析する「フロントエンド」という部分と、そのフロントエンドで分析された結果を統合して機械語(これをターゲットプログラムと言ったりする)を生成する部分、という2つに大略分けることが出来る。
だから、流れとしては次のようになる。
ソースプログラム→フロントエンド→バックエンド→ターゲットプログラム
さらに、フロントエンド、バックエンドをもうちと細かく見ると、
フロントエンド
字句解析
ソースプログラムを1字ずつ読み取り、その読み取ったものをあるかたまり(これをトークンという)に分ける。
構文解析
字句解析で得られたトークンを、ある規則にしたがって解析し、その構造を析出させる。このとき、変数名、関数名と判断されたトークンは、名前表(Symbol Table)に登録される。
意味解析
構文解析で析出された構造を、その意味まであわせて解析し、エラーチェックなどが為される。
中間表現
上記の工程を経て、構文的にも意味的にも妥当な、中間形式が出力される。
バックエンド
最適化
フロントエンドから出力された中間表現を、より効率的に、無駄をなくしたかたちに整斉する。
コード生成
最終形態であるターゲットプログラムを生成する。
ってな感じ。
つーわけで、「変数名とか関数名を管理する」のはフロントエンド構文解析のとこで出てくる名前表Symbol Tableでした!
こういう択一式の一般的なセオリーとしては、原作たそがれ清兵衛さんが為されたように、「ダブってるものが正解ではないかと疑え」なんですけど、そういうつもりで見ると、あからさまに孤立してるようなやつが正解だったりする。
まあ、その場合、逆にそういうのが怪しいわけだから、2方面から考えていけばいい、ということですかね。
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
音
雑
虫
技術
『スペクタクルの社会』を読む
ドゥルーズ講義録
電波
趣味の数学
趣味のゲーデル
『プリンキピア・マテマティカ』を読む
自己紹介もどき
ブログペット俳句
芸術一般
言語ヲタ
お客様
GRE CS
留学
Boing Boing
映画
ちょっといい話
かなりダメな話
魂の叫び
哲学と数学
論文
引用
「いい」とも「ダメ」とも言いがたい話
悲喜こもごも
証明論
ポエム
書物への呪詛
言わずもがななことではあるけれどときに忘れてしまうこと
何か無駄なことをしよう
日々
趣味の勉強
夢
ブログの記事
翻訳
勉強
不眠
文房具
ライフハック
育児
thayashi#ucalgary.ca
(#を@に置換してください)
このブログで紹介したことのある本をランダム表示。
このブログで紹介したことのある音をランダム表示。