pulpul 日本の試験

システムアーキテクト 概念書 · システム開発・アーキテクチャ

プログラミング言語とコンパイラ

プログラミング言語は、処理の手順や仕組みを人間が記述するための形式であり、コンパイラはその記述を機械が実行できる形に変換する処理系である。本単元では、言語処理の段階、引数の受渡し方式、関数や言語の特性、記憶領域の管理を取り上げる。これらは言語ごとに実装の仕方が異なるが、どの言語にも共通する原理として理解しておく必要がある。

コンパイラの処理の流れ

コンパイラは、ソースコードを先頭から順に処理し、最終的に実行可能なコードを生成する。最初に字句解析によって文字の並びをトークンに分け、次に構文解析で文の構造を調べ、意味解析で変数や型の整合性を確認する。その後に最適化を行い、最後にコード生成へ進む。コード生成までに行う処理のうち最後に位置するのは最適化であり、字句解析はソースを扱う最初の段階である。

最適化は、処理の結果を変えずにプログラムを効率化する処理であり、構文の正しさを判定する処理とは役割が異なる。字句解析、構文解析、意味解析が検査や解釈を担うのに対し、最適化は生成されるコードの質を高める段階である。この順序を理解していると、処理段階を問う問題に対応しやすくなる。

引数の受渡し方式

サブルーチンへの引数の渡し方には、値呼出し、参照呼出し、結果呼出し、名前呼出しなどがある。値呼出しでは引数の値のコピーが渡されるため、サブルーチン内で値を変えても呼出し元の変数は変わらない。このため、引数の値が実行後も変更されないことが保証される方式は値呼出しである。

参照呼出しでは変数そのものへの参照が渡されるため、サブルーチン内の操作が呼出し元の変数に反映され得る。結果呼出しでは、サブルーチンの終了時に結果が呼出し元へ戻されるため、変数の値が変わる可能性がある。名前呼出しは仮引数を実引数の式に置き換えるように扱う方式であり、実引数が変数であれば元の変数が変更され得る。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む