プログラム言語と実行の仕組み
プログラム言語と実行の仕組みは、ソースコードが実行可能な形になるまでの過程と、プログラムの構文・記憶・引数の扱いを扱う分野である。言語ごとに構文の決め方や型の扱いが異なり、その違いがどのような誤りを防ぎ、どのような性能に影響するかを説明できることが求められる。仕組みを処理の順に追う視点を持つと、個別の用語も関連づけて覚えやすい。
コンパイラの処理の順序
コンパイラは、字句解析でソースコードをトークンに分け、構文解析で文法に合っているかを確かめ、意味解析で名前や型などの規則を検査する。その後に最適化を行い、最後にコード生成を行うのが一般的な流れである。字句解析は最初の段階であり、意味解析や構文解析は最適化より前に位置する。どの処理がどの段階にあるかを順序で覚えると、「最後に行う処理」を問う設問を取り違えにくくなる。
字句・構文の規則を表す記法
プログラム言語の構文は、BNF(バッカス・ナウア記法)と呼ばれる書き方で定義されることが多い。規則は左辺の記号が右辺の並びに置き換わることを表し、縦線は選択を表す。再帰的な規則を使うと、括弧の入れ子や任意個の繰り返しを表現できる。一方で、括弧を使う規則では内側の要素の区切りとなるコンマなどが必要であり、それが欠けた文字列は生成できない。この判定を一つずつ規則に当てはめることが解法の基本である。
識別子の定義も、同じ考え方で読める。先頭が英字で、それ以降に英数字が任意個続く識別子は、先頭に英字を置き、その後に英字または数字を繰り返す規則で表せる。数字だけを単独の選択肢として認めると、数字で始まる文字列を生成してしまう。終端記号の並びを先頭から組み立てる意識を持つと、規則の誤りを見つけやすい。
型付けとブロック構造
静的型付けの言語は、変数の型をコンパイル時に検査するため、変数名の誤りや不適切な代入を実行前に発見できる。TypeScript は JavaScript に型の記述を加えた言語で、型の誤りをコンパイル時に検出できる。一方、JavaScript は通常、動的型付けの言語である。Web プログラミングで扱うスクリプト言語を区別するときは、型の検査がいつ行われるかを基準にする。
この節の続き
- 記憶管理とガーベジコレクション
- 引数の受け渡し方式
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む