@comment $OpenXM: OpenXM/src/asir-doc/int-parts/intro.texi,v 1.2 2003/04/19 10:36:29 noro Exp $ \JP @chapter Risa/Asir の構成 \EG @chapter Configuration of Risa/Asir @section engine \BJP engine は, Risa の内部形式を入力, 出力とする関数の集まりである. 主な関数として, 一つの型に対する四則演算のセットがある. また, 例えば, 多項式に対する既約因子分解など, ある型に対して固有の 演算が用意されている場合がある. 他に, 整数に対する基数変換 (10 進数と 16 進数の変換など) などが含まれる. \E \BEG \E @section parser \BJP ユーザからの入力は一般に可読な文字列として与えられる. 一方で engineの受 け取れる入力は, 後で述べるような C 言語の構造体で表現された内部形式であ る. よって, ユーザと対話を行うアプリケーションとしては, ユーザからの文字 列入力を内部形式に変換する必要がある. Asir においては, これを \E \BEG \E @enumerate \BJP @item 文字列を中間言語に変換 (parser) @item 中間言語で書かれた命令を実行して内部表現を得る (interpreter) \E \BEG @item (parser) @item (interpreter) \E @end enumerate \BJP の 2 段階で行っている. parser においては, まず文字列を一まとまりの 部分文字列 (token) の列として切り分ける. この切り分けを字句解析 と呼ぶ. 各 token は属性を付与される. 例えば 123+456 は 123, +, 456 の 3 つの token に分解され, 123, 456 は式, + は演算子 の属性を付与される. parser は token を順に読んで, 自らが持つ文法定義 と参照しながら tree を作っていく. この tree の仕様が中間言語である. これらの操作および中間言語については後に詳しく述べる. \E \BEG \E @section interpreter \BJP parser で得られた tree は, 入力文字列を中間言語で書き表したものである. interpreter は tree の根の部分から順に解釈し, 必要があれば engine の関数 を呼び出しながら, 最終的に内部形式であるデータを生成する. tree の各 node は \E \BEG \E @enumerate \BJP @item 識別子 @item 引数配列 \E \BEG @item @item \E @end enumerate \BJP なる形をしている. interpreter は, 識別子をみて実行すべき仕事および引数の 意味を知る. 必要があれば, それ自身中間言語 tree で表現されている引数を interpreter で内部形式に変換しながら, 識別子に対応する関数を呼び出す. interpreter についても後で詳述する. \E \BEG \E