ソースファイルの読み込み
お久しぶりです。
ASISのチュートリアルは大抵、コンテキストを用意したらすぐに翻訳単位の列挙をはじめてまして、大事なことがぽっかり抜けています。
それは……どうやってソースコードをASIS環境に読み込ませるか。どのソースファイルを対象にするか教えてないのに列挙開始したって何も出てきません、ええ。
で、チュートリアルでこの大事な部分がすっ飛ばされてるのには理由がありまして、この部分、実装依存なんです。
GNAT版ASISの場合は、gccの-gnatctオプションで出力した.adtファイルを読み込ませます。
with Asis.Implementation; with Asis.Ada_Environments; with Asis.Compilation_Units; with Ada.Command_Line; with Ada.Wide_Text_IO; procedure Test is My_Context : Asis.Context; begin Asis.Implementation.Initialize; Asis.Ada_Environments.Associate (My_Context, "", Parameters => "-C1 hello.adt"); Asis.Ada_Environments.Open (My_Context); -- なんかする Asis.Ada_Environments.Close (My_Context); Asis.Ada_Environments.Dissociate (My_Context); Asis.Implementation.Finalize; end Test;
見てわかるように、Parameters引数に、まるでコマンドライン引数のような形でファイル名を渡します。
オプションはasis_rm_4.htmlに書いてあります。
以下抜粋。
Asis.Implementation.InitializeのParameters引数
-d |
デバッグフラグらしい |
-k | エラーを例外ASIS_Failedに置き換える |
-nbb | エラーを標準エラー出力に吐かない |
-vs | .adtファイルを吐いたコンパイラとASISのバージョンをチェックする |
-we | 警告をエラーにする |
-ws | 警告を無視する |
Asis.Ada_Environments.AssociateのParameters引数
-C1 |
.adtファイルをひとつ取る |
-CN |
.adtファイルを複数取る |
-CA | ソースコード検索パスにある.adtファイル全部が対象 |
-FS | on the flyモード?必要に応じてASISが.adtファイルを作る? |
-FT | 既存の.adtファイルのみを処理する? |
-FM | 必要な.adtファイルが無かった場合は作る? |
-SA | pragma Compilation_Units;*1が付いている翻訳単位も対象にする |
-SE | pragma Compilation_Units;が付いている翻訳単位のうち、ソースコードが存在するものを対象にする |
-SN | pragma Compilation_Units;が付いている翻訳単位を対象にしない |
-I |
ソースコード検索パスを追加 |
--GCC= |
on the flyモードで使用するgccを指定 |
-gnatec |
.adcファイルを指定 |
-gnatA | gnat.adcを読まない |
-T |
.adtファイル検索パスを追加 |