hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
OpenHSPのチュートリアル/プリプロセッサを読む - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

プリプロセッサを読む

hspcmp/token.h, hspcmp/token.cpp のプリプロセッサを読みます。

プリプロセッサは入力されたスクリプト(*.hsp)からプリプロセス済みのスクリプトを出力します。これは#defineや#includeなどのプリプロセッサ命令を処理します。

プリプロセッサの出力

プリプロセッサの出力は主にプリプロセス済みのスクリプトですが、ほかにも細かいものがいくつかあります。

  • プリプロセス時のラベル情報。これは未使用#func, #module削除のためにコンパイラで使われます。
  • #cmpoptで設定されたオプション
  • #runtimeで設定されたランタイム名
  • packfile

プリプロセッサを呼ぶ部分

プリプロセッサを呼ぶ部分では主に以下のようなことをします。

  1. エラー表示用のバッファの設定 (SetErrorBuf?)
  2. commonフォルダの設定 (SetCommonPath?)
  3. 標準命令のマクロの登録 (LabelRegist2)
  4. __hspver__, __date__, __time__ のようなシステムマクロの登録 (RegistExtMacro?)
  5. packfile出力バッファの設定 (SetPackfileOut?)
  6. hspdef.asをプリプロセス (ExpandFile?)
  7. スクリプトファイルをプリプロセス (ExpandFile?)
  8. #cmpoptで設定されたオプションを取得 (GetCmpOption?)
  9. #cmpopt ppoutが設定されているときプリプロセス済みスクリプトをファイルに出力
  10. packfileを作る設定のとき、packfileを出力
  11. #runtimeで設定されたランタイム名を取得
  12. プリプロセス時のラベル情報

ということで、いくつかの設定をしたのち、プリプロセス処理を行い、いくつかの情報を取得するという流れになります。実際のプリプロセスのエントリポイントはExpandFile?関数ということになります。

ソースはhsc3.cppのCHsc3::PreProcess?をご覧ください。

プリプロセス済みのスクリプト

mes "hello" という簡単なスクリプトでプリプロセス済みスクリプトを見てみます。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
 
 
 
 
 
 
 
 
##0 "hspdef.as"
 
 
...(空行省略)...
 
 
##0 "t.hsp"
mes@hsp "hello"

##0 "hspdef.as"の後ろには hspdef.as をプリプロセスした結果があるのですが、プリプロセス済みスクリプトではコメントや#defineなどいくつかのプリプロセッサ命令は削除されるのでただの空行の連続になっています。

また mes は mes@hsp になっていますね。

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-06-29 (月) 23:16:40 (1622d)