back

言語プロセッサ


プログラム言語で書かれたプログラムを解釈、翻訳するプログラム

アセンブラ アセンブラ言語で記述された原始プログラムを機械語のオブジェクトモジュールに翻訳
コンパイラ 高水準言語で記述された原始プログラムを機械語のオブジェクトモジュールに翻訳
インタプリタ 高水準言語で書かれたプログラムを解釈しながら実行する
ジェネレータ 入力・処理・出力に関するいろいろな条件をパラメタで記述し,問題の処理目的に応じたプログラムを生成
トランスレータ ある処理系用に書かれた原始プログラムを,他の処理系用の原始プログラムに変換
エミュレータ 他のコンピュータ用のプログラムを解読し,実行するマイクロプログラム

 


★★★宿題:二種向け★(2000/3/22)

 言語プロセッサに関する記述のうち,正しいものはどれか。

 ア アセンブラは,ある処理系用に書かれた原始プログラムを,他の処理系用
  の原始プログラムに変換する。

 イ インタプリタは,他のコンピュータ用のプログラムを解読し,実行するマ
  イクロプログラムである。

 ウ ジェネレータは,入力・処理・出力に関するいろいろな条件をパラメタで
  記述し,問題の処理目的に応じたプログラムを生成する。

 エ トランスレータは,高水準言語で書かれたプログラムを解釈しながら実行
  する。


解答

ア:トランスレータ
イ:エミュレータ
ウ:ジェネレータ
エ:インタプリンタ

■解答■(宿題メールより)
  二種午前平成11年春問37

>言語プロセッサ[language processor]
>言語になんらかの処理を行い翻訳や変換作業などをするプログラム。
>たとえば、C言語などのプログラム言語で書いたプログラムを
>原始プログラム(ソースプログラム)という。
>コンピュータで実行するためには、コンパイルして機械語に翻訳
>する必要がある。翻訳されたプログラムを目的プログラム
>(オブジェクトプログラム)という。
>この翻訳作業を行うのが、たとえばC言語コンパイラであり、
>このような翻訳を子kなうプログラムの総称が言語プロセッサである。
>(新星出版社「情報処理用語辞典」p.136)

 どうもありがとうございました。

>ア アセンブラ・・・アセンブラ言語で書かれたソースプログラムを機械語の
> オブジェクトプログラムに翻訳する言語処理プログラム。
>イ インタプリタ・・・プログラム言語で記述したソースプログラムの命令、
> または中間コードを1命令ごとに機械語に翻訳しながら
> 実行するプログラム。
>ウ ジェネレータ・・・あらかじめプログラムの骨組みができており、利用者が
> 入力データや処理結果の内容と形式、および処理条件などを
> 一定の書式の各欄に記入、入力すると、自動的に必要な
> プログラムを作成してくれるプログラム。
>エ トランスレータ・・・翻訳プログラムの総称。
> Cでは、コンパイラ以外の翻訳を行うプログラム。
>参考:「合格情報処理2月号付録 情報システム辞典」p.4,16,80,81,146


 どうもありがとうございました。

> ジェネレータ(generator)
> 高水準の非手続き言語(処理の条件などをパラメタとして与える)で作成した
> 原始プログラムから機械語の目的プログラムを生成する言語プロセッサ。
> 報告書作成のRPGなどが有名。
> ディスプレイ上で画面イメージを作成するだけで、COBOLプログラムを生成
> するもの、言語使用を指定するだけでコンパイラを作成するコンパイラ生成
> プログラムなどもある。
> (新星出版社 情報処理用語辞典 P.166より)

 どうもありがとうございました。


★★★宿題:二種(基本情報技術者)向け★(2000/7/27)

 主プログラム Main と副プログラム SubX からなる図のプログラムを実行した
後の,変数 A,B の値の組合せとして,正しいものはどれか。ここで,プログラ
ム中の [ ] の部分は,コードの代わりにその内容を記述したものである。


┌―――――――――┐┌―――――――――――――――――――――――┐
│Main       ││SubX(参照引渡しの仮引数 C ,値渡しの仮引数 D) │
│         ││                       │
│[変数 A の宣言]  ││[変数 E の宣言]                │
│[変数 B の宣言」 ││ E = C                   │
│ A = 1     ││ C = D                   │
│ B = 2     ││ D = E                   │
│Call SubX ( A,B )││                       │
│         ││End Sub                    │
│End        ││                       │
└―――――――――┘└―――――――――――――――――――――――┘

   ┌――┬――┐
   │ A │ B │
 ┌―┼――┼――┤
 │ア│ 1 │ 1 │
 ├―┼――┼――┤
 │イ│ 1 │ 2 │
 ├―┼――┼――┤
 │ウ│ 2 │ 1 │
 ├―┼――┼――┤
 │エ│ 2 │ 2 │
 └―┴――┴――┘

 


(解答例)

仮引数Cは参照渡しなので、仮引数Cが変化すれば実引数Aも変化する。
一方、仮引数Dは値渡しなので、仮引数Dが変化しても実引数Bの値は変化しない。

subX(C,D)    C=1 D=2
E=C         E=1 C=1 D=2 
C=D         E=1 C=2 D=2
D=E         E=1 C=2 D=1

しかし、Dは値渡しなので2は変わらない
よって、subX(2,2)となる。

■解答■(宿題メールより)
  二種午前平成12年春問65

> 値呼出し・・・手続きや関数を呼出して使用するとき、パラメタの引き渡しを仮引
> 数と実引数の対応で行うこと。この場合、値を渡された手続きや関数の中で値を書
> き換えても、呼び出した側の値に影響はない。Cでは値渡し、COBOLでは値引
> 渡という。(5P)
>
> アドレス渡し・・・手続きや関数を呼び出して使用するとき、パラメタの引き渡し
> を仮引数のアドレスやポインタで与えて、実引数との対応をとること。仮引数で値
>
を変更した結果が実引数に反映されるので、値の変更結果を呼び出し元の関数側で
>
参照できる。(8P)
> (学研合格情報処理 情報システム辞典2000度版)

 どうもありがとうございました。

> 値渡し:
> プロシージャに引数として変数を渡す方法の 1 つ。
> 値渡し (値による引き渡し) で変数をプロシージャに渡すと、
> 元の変数のコピーが作成され、呼び出されたプロシージャに渡されます。
> したがって、呼び出されたプロシージャ内で渡された変数の値を変更しても、
> 呼び出し側のプロシージャが参照する元の変数の値は変更されません。
> (Microsoft VisualVasic5.0のヘルプより)
>
> 参照渡し:
> プロシージャに引数として変数を渡す方法の 1 つ。
> 参照渡し (参照による引き渡し) で変数をプロシージャに渡すと、
> その変数の内容は、呼び出されたプロシージャ内で変更することができます。
> 参照渡しでは、呼び出されたプロシージャ内では、渡された変数のメモリ内の
> 格納場所に対して、直接操作を行います。
> したがって、呼び出されたプロシージャ内で渡された変数の値を変更すると、
> 呼び出し側のプロシージャで参照する元の変数の値も変更されます。
> (Microsoft VisualVasic5.0のヘルプより)
>
>
> 【質問】
>
> 「参照渡し」「値渡し」の、名前と、言葉の意味に矛盾があるように
> 感じて、以前からもやもやしています。
> 値渡しは、「値を渡す」のだから、「値渡しが値を直接変更」し、
> 参照渡しは、「参照する」のだから、「参照渡しは参照するだけで値を変更しない」
> べきだと思うのです。
> 矛盾を感じない、いい考え方があったら、是非教えてください。

 アセンブラのレベルの用語としてみます。「参照」はアドレスを参照しているの
で,危険。値は,値のみ渡すだけです。
 オブジェクト指向もそうですが,アセンブラからみた用語がかなり残っていま
す。