IT関連
高水準言語
- ・高水準言語(コンパイラ言語・インタプリタ言語)について簡単にご説明します。
- ・データ分析・解析でITが関係するため記事にしております。
- ・ITの理解を深めたい方はご参照ください。
- ・不明点あれば問い合わせください。
- ※当サイトで掲載しているデータは適当に作成したものであり、実際のものではありません。
アセンブリ言語からコンパイラ言語へ
アセンブラさえあれば、アセンブリ言語だけでプログラミングできるようになります。
それはつまり、機械語を意識しなくても、コンピュータを自由に扱えるようになるということです。
とは言っても、アセンブリ言語も扱いやすいとは言い切れません。
特にプログラムの規模が巨大化すればするほど、ソースコードは煩雑になり、可読性や保守性が著しく損なわれてしまうものです。
当初、コンピュータを利用するにあたって、その大半がプログラミングやデバッグ(プログラムにおける誤りを修正すること)に費やされていたものでした。
そこで、開発効率を改善すべく悩み抜いた末、当時の技術者がどのように対応したかというと…
数学的にプログラミングする仕組みを構築しました!
「数学的に」というと、例えば、数式を利用できるようにすることが挙げられます。
アセンブリ言語では数式は利用できませんでした。
もしアセンブリ言語で「1+2×3」を計算しようとすると、loadやaddなどの記号を用いて処理を記述する必要があります。
しかし、処理が数式なのであれば直接「1+2×3」と書いた方がシンプルです。
この考えの下、例えば以下のように書けるようにします。
意味としては、「1+2×3の計算結果を、定義した変数xに代入し、それを表示しろ」というものです。
これなら随分と表記が簡素化され、アセンブリ言語のコードと比較しても、扱いやすくなったのではないでしょうか。
当然、このコードもコンピュータが直接解釈することはできないため、実行させるにあたって、機械語に変換する必要があります。
しかしながら、アセンブリ言語のときのように、単純に文字列を置き換えるだけでは機械語に変換することはできません。
アセンブリ言語の場合は、機械語を1対1で記号に変換しただけであったため、アセンブリ言語から機械語への変換は容易でした。
一方、数式を用いた数学的な記述は、人間が扱いやすいように作られた、機械語とはまったく無関係の表現です。
このため変換が難しいのです。
例えば数式には処理すべき順序があり、1+2×3であれば2×3に+1するように計算しなければなりません。
1+2に×3してはいけないのです。
これを構造で表現すると以下のようになります。
こうした事情から、数式を機械語に変換するにあたって、単純に置き換えるということはできません。
まずは、どのような処理が発生するのか、ソースコードを解析し、事細かくリストアップしていかなければなりません。
そして、各処理に該当するアセンブリ言語のコードを当てはめていくことで、同等の振る舞いができるアセンブリ言語のプログラムを組み立てていきます。
手順としては大雑把に以下のようになります。
【手順1】ソースコードを字句単位に分解する(字句解析と言う)
【手順2】分解した字句を構文単位で処理する(構文解析と言う)
【手順3】意味的な誤りがないかチェックする(意味解析と言う)
【手順4】同等なアセンブリ言語のコードを出力する
さきほどの1+2×3の計算処理であれば、まず字句解析し「1,+,2,×,3」のように分解します。
そして構文解析することで、「2×3してから+1する」という構造を把握します。
ここまで分かれば該当するアセンブリ言語のコードを生成することはできますが、一応、意味解析し、意味的な誤りがないかをチェックします。
例えば1+2.0×3のように不自然な箇所があった場合は指摘します。
特に問題がなければ、ソースコードと同等のアセンブリ言語のコードを出力します。
最終的な出力がアセンブリ言語のコードとなっていますが、これは、アセンブラがある以上、アセンブリ言語のコードを出力できれば、後はアセンブラで処理できるためです。
このような手順でアセンブリ言語のコードを出力するプログラムをコンパイラと言います。
そして、コンパイラでアセンブリ言語のコードを出力することをコンパイルすると言います。
および、コンパイルされるような言語のことを高水準言語と言います。
まとめると、アセンブリ言語と高水準言語は以下のような関係にあります。
ただし、一般的にはコンパイラはアセンブラを含んでおり、コンパイルするだけで実行ファイルも生成されるようになっています。
ここで、高水準言語には、コンパイラ言語とインタプリタ言語の二つがあります。
さきほどの例のように、コンパイラで変換する言語はコンパイラ言語と言います。
ただしこれらはあくまで方式の違いであり、言語的な違いはありません。
一般的にプログラミング言語と言うと、これら高水準言語を指します。
そして、プログラミング言語は目的によって特徴が大きく異なります。
ゆえに、技術が変わるたびに目的に応じたプログラミング言語が開発され続けています。