中間言語

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

中間言語(ちゅうかんげんご)とは、プログラミング言語処理系において(#プログラミング言語処理系)と、言語学において(#言語学における中間言語)指す内容が異なる。詳細は以下を参照。

プログラミング言語処理系[編集]

中間言語は、プログラミング言語処理系において、高水準言語ソースコード機械語のコードの中間にあたる中間表現の言語である。

人間が読むことのできる状態から、コンピュータ内部のデータ形式に一旦置き換えたもので、機械語ではないからそのままCPUが解釈して実行することはできない。BASICなどのインタプリタで実行速度の高速化のためによく利用される。また、コンパイラでは高度な最適化を施すためには中間表現が欠かせない。

仮想機械の機械語でバイト指向の中間言語をバイトコードという。目的機械のコード生成の前段階として、アーキテクチャ独立の一種の機械語と言える3番地コードを使うコンパイラがある。.NET Frameworkでは共通中間言語を定義した。Pコードを使うPascalの実装がある。

初期のBASIC処理系の実装で用いられた中間言語は、バイトコードのようなものではなく、字句解析のみを行い、予約語などを数値に変換しただけといったものもあった。実行時の字句解析が不要になるが、ソースコードに戻して表示、編集することもできる。GOTOの飛び先をキャッシュするなどの工夫がされたものもあった。高度な中間言語を利用する実装もあり、N88-日本語BASIC(86)(MS-DOS版)のコンパイラは、実行ファイルを出力するが、その内部は中間言語コードでありまたその実行には外部に、中間言語のインタプリタを含むランタイムライブラリが必要だった。

中間言語から、簡単にソースコードを復元、推定することが出来るものも多い(難読化、ないし推定不可能にするものもある)。そのため、ソースコード保護の目的などで、難読化ツール(obfuscator)があり、使われることがある。

機械翻訳における中間言語[編集]

中間言語en:Pivot language)は、機械翻訳の、ピボット翻訳という手法で使われる言語である。直訳的に「枢軸言語」とする場合もある。

言語学における中間言語[編集]

中間言語とは第二言語(外国語)の学習者が、その言語を学んでゆく過程で発する、目標言語とは様々な点で違った体系を持つ学習者に特徴的な言語のこと。すべての言語において、その個別の学習者には中間言語が存在する。この中間言語は当然、学習者の習得レベルや学習内容、母語などに影響を受ける。

 たとえば日本語のみを母語とする者が話す英語は、英語を母語とする人たちのそれとは違っているのが普通である。それは文法や発音が少し違っていたり、特定の表現が多く用いられたり、またその反対にほとんど用いられなかったりと、個人によって異なる。そのようにある一定の規則を持ちながらも、目標言語とは異なっている学習者の言語を中間言語という。

 この中間言語という概念はラリー・セリンカー(Larry Selinker)によって1972年に提唱された。中間言語という概念が登場するまで、第二言語習得研究における主な手法は、学習者の誤用から、目標言語と学習者の母語との違いを研究する、いわゆる誤用分析が中心であった。しかし学習者が発した誤りを研究するだけでは、回避(例えば、日本語の母語話者は英語におけるwhatやthatのような関係節をなるべく使わないように話そうとする)など誤用以外の問題点を扱えないことから、「学習者言語の自律性」を重んじる中間言語分析が注目されるようになった。

関連項目[編集]